[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)
  • 태그

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

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

티스토리툴바