본문으로 바로가기

1. List 인터페이스 특징

  • 객체를 일렬로 늘어놓은 구조
  • 객체를 인덱스로 관리
  • 객체 저장, 검색, 삭제 기능 제공
  • 객체 저장 시 자동 인덱스 부여
  • 객체 자체를 저장하는 것이 아니고 객체의 번지를 참조
  • 구현 클래스로는 ArrayList, LinkedList, Vector가 있습니다.

 

2. List 인터페이스 주요 기능

[객체 추가]
boolean add(E e) → 특정 객체를 맨 끝에 추가
void add(int index, E element) 특정 인덱스에 객체 추가
set(int index, E element) 특정 인덱스에 객체 교체

[객체 검색]
boolean contains(Object o) 특정 객체가 존재하는지 여부 
get(int index) 특정 인덱스에 저장된 객체를 리턴
boolean isEmpty() 비어있는지 확인
int size() 저장된 객체 수 리턴

[객체 삭제]
void clear() 저장된 모든 객체 삭제
remove(int index) 특정 인덱스에 저장된 객체 삭제
boolean remove(Object o) 특정 객체 삭제

 

E = 제네릭 타입

 

3. ArrayList

  • 내부 배열에 객체를 저장해서 인덱스로 관리합니다.
  • 인덱스 0번부터 차례대로 저장됩니다.
  • 배열과 다르게 객체를 추가할 경우 자동적으로 저장 용량이 늘어납니다.
  • 특정 인덱스의 객체를 삭제할 경우 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨집니다.
  • 특정 인덱스에 객체를 추가할 경우 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려납니다.
  • 빈번한 객체 삭제와 삽입이 일어날 경우 ArrayList 보다는 LinkedList 사용이 유리합니다.
  • 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에는 ArrayList가 더 성능이 좋습니다.

 

[사용법 예시]

// String 객체를 저장 할 ArrayList 생성
List<String> arrayList = new ArrayList<>();

// 객체 추가
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("e");

// 객체 검색
String b = arrayList.get(1);

// 객체 삭제
arrayList.remove(1);

// ArrayList size
int size = arrayList.size();

// ArrayList 루핑
for(int i =0; i<size; i++) {
    System.out.println(arrayList.get(i));
}

// ArrayList 루핑 (foreach)
for(String alpha: arrayList) {
    System.out.println(alpha);
}

// ArrayList 루핑 (람다, 메소드 레퍼런스)
arrayList.forEach(System.out::println);

 

4. LinkedList

  • ArrayList와 사용법은 같지만 내부 구조가 다릅니다.
  • 인접 참조를 링크해서 관리합니다.
  • 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다.
  • 빈번한 객체 삭제와 삽입이 일어나는 경우 ArrayList보다 유리합니다.

 

[사용법 예시]

// String 객체를 저장 할 LinkedList 생성
List<String> linkedList = new LinkedList<>();

// ArrayList와 추가, 삭제, 검색 방법은 동일합니다.

 

5. Vector

Thread Safe

  • ArrayList와 동일한 내부 구조를 가지고 있습니다.
  • Thread Safe
  • 동기화된 메소드로 구성되어 있습니다. 
  • 멀티 스레드가 동시에 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있습니다.
  • 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있습니다.

 

6. ArrayList vs LinkedList

ArrayList 구조

remove araylist

// String 객체를 저장 할 ArrayList 생성
List<String> arrayList = new ArrayList<>();

// 객체 추가
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("e");

// 객체 삭제
arrayList.remove(1);

 

LinkedList 구조

LinkedList
remove linkedlist

정리

[순차적으로 추가/삭제]
ArrayList Win

[중간에 추가/삭제]
LinkedList Win

[검색]
ArrayList Win