List 컬렉션

강민수·2022년 11월 7일
1

Java

목록 보기
3/9
post-thumbnail

List 컬렉션


배열의 한계점

  • 배열에 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기 어려움
  • 객체를 삭제했을 때 해당 인덱스가 비어버린다.
  • 새로운 객체를 저장할 땐 어디 인덱스가 비어 있는지 확인해야한다.

image

  • 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여
  • List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조
  • 동일한 객체를 중복 저장할 수 있는데, 이 경우 동일한 번지가 참조
  • null도 저장이 가능한데, 이 경우 해당 인덱스는 객체를 참조 X

ArrayList

List 인터페이스의 구현 클래스

  • 배열은 생성할 때 크기가 고정이라 중간에 변경할 수 없음
  • ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어남
  • 생성하기 위해서는 저장할 타입을 파라미터로 표기하고 기본 생성자를 호출, 처음부터 용량을 설정해 줄 수 있음
    • List<String> list = new ArrayList<String>();
    • List<String> list = new ArrayList<String>(30);
  • 특정 객체를 삭제하면 바로 뒤 인덱스부터 마지막까지 앞으로 1씩 당겨짐
  • 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 사용하지 않는 것이 좋음

Vector

ArrayList와 동일한 내부 구조를 가짐

  • 생성하기 위해서는 젖아할 객체 타입을 타입 파라미터로 표기하고 기본 생성자를 호출
    • List<E> list = new Vecotr();
  • 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실해할 수 없음
  • 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있음
  • 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있음

LinkedList

ArrayList와 사용 방법은 같지만 내부 구조가 완전히 다름
image

  • 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않음
  • 객체를 삽입할 때도 마찬가지

image

  • 생성하기 위해서는 저장할 객체 타입을 파라미터 E에 표기하고 기본 생성자 호출
    • List<E> list = new LinkedList<>(E);

성능차이

image

  • 조회시에는 ArrayList가 우위에 있음
  • 중간에 삽입/삭제시에는 LinkedList가 우위에 있음
profile
능동적으로 개발 지식을 찾아다니는 백엔드 개발자입니다 😊 작성된 글에 대한 질문들 및 피드백은 언제나 환영입니다 :) 👌

0개의 댓글