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) → 특정 객체가 존재하는지 여부
E get(int index) → 특정 인덱스에 저장된 객체를 리턴
boolean isEmpty() → 비어있는지 확인
int size() → 저장된 객체 수 리턴
[객체 삭제]
void clear() → 저장된 모든 객체 삭제
E 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
- ArrayList와 동일한 내부 구조를 가지고 있습니다.
- Thread Safe
- 동기화된 메소드로 구성되어 있습니다.
- 멀티 스레드가 동시에 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있습니다.
- 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있습니다.
6. ArrayList vs LinkedList
ArrayList 구조
// 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 구조
정리
[순차적으로 추가/삭제]
ArrayList Win
[중간에 추가/삭제]
LinkedList Win
[검색]
ArrayList Win
'Backend > Java' 카테고리의 다른 글
[Java] Map 인터페이스 특징 및 구현체 (HashMap, Hashtable, LinkedHashMap, Properties, TreeMap) (0) | 2022.02.11 |
---|---|
[Java] Set 인터페이스 특징 및 구현체 (HashSet, LinkedHashSet, TreeSet) (0) | 2022.02.10 |
[Java] 자바 컬렉션 프레임워크 소개 (List, Set, Map) (0) | 2022.02.08 |
[Java] 리턴 값이 있는 스레드 (Callable Interface) (0) | 2022.01.19 |
[Java] DTO to DTO (Stream API) (0) | 2022.01.18 |