본문 바로가기

[TIL] 컬렉션 - java.util.List<E> 인터페이스 & 구현 클래스

인포꿀팁 발행일 : 2020-08-24

java.util.List<E> 인터페이스

  • 순서가 있는 컬렉션
  • 목록에서 각 요소가 삽입되는 위치에 제어 할 수 있다.
  • 요소를 인덱스로 관리하며, 인덱스로 요소를 검색하거나 삭제할 수 있다.
  • 동일한 요소(객체)를 중복해서 저장할 수 있다.
  • List 컬렉션은 객체 자체가 저장되는 것이 아니라 객체의 번지를 참조한다.
  • null도 저장이 가능하며, null을 저장한 경우에는 해당 인덱스는 객체를 참조하지 않는다.

주요 구현 클래스

ArrayList, LinkedList, Vector, Stack

java.util.ArrayList<E> 클래스

개요

  • List 인터페이스를 구현한 클래스
  • 크기 변경이 가능한 배열을 구현한 클래스로 초기 용량이 10이다.
  • 목록을 저장하기 위해 내부적으로 사용되는 배열(array)의 크기를 조작하는 메소드를 제공
  • ArrayList에 요소를 추가할 때 저장 용량이 부족되면 자동으로 용량이 늘어난다.
  • 자료 추가 및 삭제 시 임시 배열을 만들어 자료를 복사하는 방법을 이용한다.
  • 대량의 자료를 추가하거나 삭제하는 경우 내부적으로 처리량이 늘어나면서 성능 저하를 일으킬 수 있다.
  • 각 데이터는 인덱스를 가지고 있기 때문에, 한번에 참조가 가능해 데이터의 검색에는 유리하다.
  • 멀티 쓰레드 환경에서 동기화되지 않는다.(unsynchonized)
  • 동기화되는 않는 것을 제어하고 Vector 클래스와 유사하다.

배열과 ArrayList

배열

배열은 한번 크기가 결정되면 배열의 크기를 변경할 수 없다.

배열의 처음이나 중간에 데이터를 삽입하는 경우, 기존 데이터가 존재하면 데이터를 덮어쓰기 때문에 기존 데이터는 사라진다.

 

ArrayList

가변 길이의 자료구조로 데이터의 검색에 유리하며, 추가 도는 삭제에는 성능을 고려해야 한다.

리스트의 처음, 끝, 중간에 자료를 추가 또는 삭제하는 기능을 제공한다.

java.util.Vector<E> 클래스

개요

  • List 인터페이스를 구현한 클래스
  • 객체의 가변길이 배열을 구현한 클래스로 초기 용량 10이다.
  • 배열과 마찬가지로 인덱스를 이용하여 요소를 액세스 할 수 있다.
  • Vector을 만든 후 항목을 추가하거나 제거하는데 필요한 만큼의 Vector의 크기를 늘리거나 줄일 수 있다.
  • 멀티쓰레드 환경에서 동기화(synchronized)된다. (thread-safe)
  • 동기화가 필요없는 경우에는 ArrayList클래스를 사용할 것을 권장함.

java.util.LinkedList<E> 클래스

개요

  • List 인터페이스 및 Deque 인터페이스를 구현한 클래스 
  • 내부적으로 Linked List 자료 구조를 사용하여 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 저장하는 방식을 구현.
  • 데이터의 추가 및 삭제 시 ArrayList처럼 불필요한 복사가 일어나지 않아 처리 속도가 빠르다.
  • 데이터 검색은 ArrayList에 비해 느리다.
  • 멀티 쓰레드 환경에서 동기화 되지 않는다.(unsynchronized)

java.util.Stack<E>

개요

  • Vector<E> 클래스를 상속 받은 클래스
  • LIFO(Last-In-First-Out) 구조를 갖는 스택을 구현한 클래스
  • 일반적인 push와 pop 작업 및 스택의 가장 위 객체를 확인하거나 스택이 비어있는지 확인할 수 있다.

댓글