ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [Java] 컬렉션 프레임워크 3 (List, ArrayList 중심으로)
    IT Study/컴퓨터 기초 2023. 3. 28. 19:21
    728x90

     

    1. List 인터페이스란?

    List는 순서가 있는 데이터의 집합을 다루기 위한 인터페이스로, 데이터의 중복을 허용한다는 특징을 가집니다.

    List는 순서가 있는 만큼 인덱스를 사용하여 요소에 접근할 수 있다는 것에 주목해야 합니다.

     

    순서와 인덱스에 대해 상기시키며 List에 대해 이해해 봅시다.

     

    2. ArrayList 클래스

    ArrayList는 List 인터페이스를 구현하는 클래스 중 가장 일반적으로 사용되는 클래스입니다.

    내부적으로 배열을 이용해 요소를 저장하기 때문에,

    인덱스를 통한 접근은 빠르지만 요소의 추가/삭제가 많을 경우 성능저하가 일어날 수 있습니다.

     

    2-1. ArrayList  클래스의 메서드

    첫 번째 표는 Collection 인터페이스와 동일한 이름을 가진 ArrayList의 메서드입니다.

    이름 매개변수 기능 반환타입
    add(int index, E e) index 번호, 추가할 객체 리스트의 index 위치에 객체 추가 -
    addAll(int index, Collection) index 번호, 추가할 컬렉션 리스트의 index 위치에 컬렉션 추가 boolean, 추가 시 true
    remove(int index) index 번호 리스트의 index 위치의 요소 삭제 E, 제거한 요소

     

    두 번째 표는 ArrayList 클래스에만 존재하는 메서드입니다.

    이름 매개변수 기능 반환타입
    get(int index) index 번호 리스트의 index 위치 값 반환 E e
    indexOf(Object o) 찾을 요소 리스트의 요소 index 값
    왼쪽부터 찾아 반환
    int
    lastIndexOf(Object o) 찾을 요소 리스트의 요소 index 값
    오른쪽부터 찾아 반환
    int
    ListIterator<E>
    listIterator()
    - 리스트의 요소를 하나씩 가져오기 위한
    반복자 반환
    ListIterator 객체
    ListIterator<E>
    listIterator(int index)
    index 번호 리스트의 요소를 index 위치에서 시작해
    하나씩 가져오기 위해
    반복자 반환
    ListIterator 객체
    set(int index, E e) index 번호, 변경할 요소 리스트의 index 위치의 값을
    주어진 요소로 변경
    -
    subList
    (int start, int end)
    시작 index 번호,
    끝 index 번호
    리스트의
    시작 번호부터 (끝 -1) 번호를 가진
    하위 리스트 생성
    List 객체

     

    2-1-1. subList(int start, int end)

    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    list.add("D");
    
    // 인덱스 1부터 2(3-1)까지의 요소로 이루어진 하위 리스트를 생성합니다.
    List<String> subList = list.subList(1, 3);
    
    // 하위 리스트의 요소를 출력합니다.
    System.out.println(subList); // [B, C]
    
    // 하위 리스트의 첫 번째 요소를 수정합니다.
    subList.set(0, "X");
    
    // 원본 리스트의 요소를 출력합니다.
    System.out.println(list); // [A, X, C, D]

     

    subList(int start, int end) 메서드는 원본 리스트의 일부를 하위 리스트로 반환합니다.

    (int start에 작성되는 수) index부터 (int end에 작성되는 수 - 1) index까지의 요소를 하위 리스트로 생성합니다.

    <이해를 돕기 위한 예시>
    subList(2, 5) : 2번 인덱스부터 4(5-1) 번 인덱스까지의 하위 리스트 반환

    subList(1, 3) : 1번 인덱스부터 2(3-1) 번 인덱스까지의 하위 리스트 반환

     

    subList는 새로운 리스트를 만드는 것이 아닌, 원본의 요소 일부를 가지는 하위 리스트를 만들기 때문에

    위의 예시처럼 하위 리스트에서 요소를 수정하더라도 원본 리스트에 영향을 줄 수 있습니다.

     

    3. LinkedList 클래스

    LinkedList는 List 인터페이스를 구현하는 클래스로 내부적으로 이중 연결 리스트를 이용해 요소를 저장합니다.

    삽입, 삭제가 빈번한 경우에 사용하며, 데이터의 순차적인 접근이 적은 경우에 사용하는 것이 유리합니다.

     

    4. Vector 클래스

    Vector는 ArrayList와 동일한 내부 구조를 가지지만, 멀티 스레드 환경에서 사용할 수 있도록 동기화가 되어있습니다.

     

Designed by Tistory.