[Java] ArrayList - 컬렉션 프레임워크

2025. 2. 17. 23:41·TIL/Java

배열

가장 기본적인 자료 구조인 배열에 대해서 먼저 알아보자.

배열의 특징 ( 인덱스 )

  • 인덱스를 활용하면 매우 빠르게 데이터에 접근이 가능하다
  • 인덱스를 통한 입력, 변경, 조회의 경우 단 한 번의 연산으로 원하는 위치에 도달할 수 있다.

배열의 인덱스

  • 배열은 물리 메모리상에 순서대로 붙어서 선언된다
  • 따라서 해당 배열이 저장하고 있는 자료형에 따라서 다음과 같은 연산이 가능하다
    • 배열의 시작 위치 + 자료의 크기 * 인덱스 크기
  • 즉, 배열의 크기와 무관하게 한 번의 연산으로 원하는 위치를 찾을 수 있게 된다
  • 따라서 배열의 인덱스를 활용하는 연산이 매우 빠르게 된다

배열의 한계

  • 배열은 생성하는 시점에 그 크기를 한 번만 정할 수 있고, 이후 수정할 수 없다
  • 배열의 특정 위치에 값을 추가/삭제하기 위해서는 해당 인덱스로부터 뒤에 있는 값들에 대해서 이동하게 된다
  • 따라서 데이터를 삽입하는 연산이 지속될 경우 배열의 크기를 넘어서 예외가 발생하게 될 것이다
  • 동적으로 길이를 늘리고, 줄일 수 있다면 조금 더 편하게 배열을 사용할 수 있을 것이다.

 

배열 리스트 ( ArrayList )

배열의 경우 크게 2가지 불편함이 존재했다.

  • 길이를 동적으로 변경할 수 없다
  • 데이터를 추가/삭제할 때 모든 데이터를 직접 옮겨주어야 한다

배열의 이런 불편함을 해소하기 위해 만들어진 자료구조가 ArrayList 이다.

ArrayList 구조

ArrayList는 내부적으로 Object[] 을 갖고 있어 해당 배열에 데이터를 저장하게 된다.

또한 capacity를 통해 현재 Object 배열의 크기를 저장하고, size를 통해서 현재 ArrayList의 크기를 관리하게 된다.

ArrayList 작동

  • 길이를 동적으로 변경할 수 없던 배열에 비해서 ArrayList는 동적으로 크기를 변경해준다.
  • 예를 들어 현재 ArrayList에 4개의 값을 추가하게 되면 size = 4 , capacity도 4로 꽉 차있는 상태가 될 것이다.
  • 이 다음에 또 하나의 값을 추가하게 되면, 크기가 더 큰 배열을 새로 생성하고, 기존의 배열에 있는 값을 복사한 후 ArrayList 객체가 새로 만들어진 객체를 참조하도록 만든다.
  • 또한 값을 add 하는 과정에서 배열에서는 직접 값을 이동시켜주어야 했지만, ArrayList는 자동으로 과정을 진행해준다.

ArrayList 특징

  • ArrayList의 경우 배열을 포함하고 있기 때문에 데이터에 대한 접근, 삭제, 삽입의 경우 모두 배열과 동일한 시간으로 이루어진다.
  • 다만 삭제/삽입의 경우 직접 데이터를 이동시켜야 하는 배열과 다르게 기능을 메서드가 해주고 있다.
  • 따라서 ArrayList는 배열을 조금 더 편하게 사용할 수 있도록 기능을 추가한 자료구조라고 볼 수 있다.

 

ArrayList 기능

ArrayList 생성 방법

  • 기본적인 생성 방법
  • ArrayList의 capacity를 미리 지정하는 방법
  • 다른 컬렉션 프레임워크의 값을 갖고 생성하는 방법
ArrayList<Integer> arrayList1 = new ArrayList<>();
ArrayList<Integer> arrayList2 = new ArrayList<>(500);
ArrayList<Integer> arrayList3 = new ArrayList<>(Arrays.asList(2, 3, 4));
ArrayList<Integer> arrayList4 = new ArrayList<>(arrayList3);

 

요소 추가

  • 요소를 현재 리스트의 가장 뒤에 추가
  • 컬렉션의 모든 요소를 리스트의 가장 뒤에 붙여서 추가
arrayList1.add(1);
arrayList1.addAll(arrayList4);

 

요소 삽입

  • 동일한 add 메서드를 사용할 때, 인덱스를 지정해서 추가할 위치를 지정할 수 있다.
arrayList1.add(1, 10);
arrayList1.addAll(1, arrayList4);

 

요소 삭제

  • 특정 인덱스에 위치한 요소를 제거
  • 특정 객체의 값을 제거 ( 가장 앞에 있는 객체를 제거한다 )
  • 컬렉션 프레임워크에 존재하는 값들에 해당하는 값을 모두 제거
arrayList1.remove(arrayList1.size() - 1);
arrayList1.remove((Integer) 10);
arrayList1.removeAll(Arrays.asList(3));

 

요소 검색

  • ArrayList가 비어있는지 여부를 boolean으로 반환
  • 특정 객체 값을 포함하고 있는지 여부를 boolean으로 반환
  • 특정 객체 값이 처음 위치하는 인덱스를 반환
System.out.println(arrayList2.isEmpty());
System.out.println(arrayList1.contains((Integer) 3));
System.out.println(arrayList1.indexOf(3));

 

요소 얻기

  • index에 위치한 요소를 반환한다
arrayList1.get(0)

 

요소 변경

  • index 에 위치한 요소의 값을 변경한다
arrayList1.set(0, 100);

 

ArrayList 복제

  • Object 로 반환하기 때문에 캐스팅을 해주어야 한다
  • 또한 깊은 복사가 진행되어서 list5와 arrayList1의 구성은 동일하지만 list5를 수정해도 arrayList1이 변경되지 않는다.
 ArrayList<Integer> list5 = (ArrayList<Integer>) arrayList1.clone();

 

ArrayList  변환

  • ArrayList를 배열로 변환하여 반환한다
  • 이 때 다음과 같은 형식의 캐스팅이 필요하다
Integer[] arr = arrayList1.toArray(new Integer[0]);

'TIL > Java' 카테고리의 다른 글

[Java] LinkedList - 컬렉션 프레임워크  (1) 2025.02.19
[Java] 제네릭 개요  (1) 2025.02.15
[Java] 날짜와 시간 데이터 다루기  (0) 2025.02.11
[Java] 열거형 - enum  (0) 2025.02.09
[Java] 래퍼 클래스  (1) 2025.02.09
'TIL/Java' 카테고리의 다른 글
  • [Java] LinkedList - 컬렉션 프레임워크
  • [Java] 제네릭 개요
  • [Java] 날짜와 시간 데이터 다루기
  • [Java] 열거형 - enum
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    unsupported characters for the charset 'iso-8859-1'
    다형성
    static 필드
    자바
    제네릭 클래스
    인텔리제이한글
    string
    object
    참조공유
    데이터베이스
    불변객체
    super()
    타입안전열거형
    프로그래머스
    SQL
    컬렉션프레임워크
    프로그래머스 베스트앨범 자바
    jdk란?
    프로그래머스 베스트앨범
    프로그래머스 소수찾기
    인스턴스
    인터페이스
    static메서드
    sql limit
    Java
    프로그래머스 소수찾기 자바
    묵시적형변환
    인텔리제이 한글 깨짐
    sql where
    default메서드
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[Java] ArrayList - 컬렉션 프레임워크
상단으로

티스토리툴바