객체를 인덱스로 관리한다.
| 분류 | 메서드 | 역할 |
|---|---|---|
| 추가 | add(E e) | 객체 e 를 맨 끝에 추가 (+ 성공 여부 리턴) |
| 추가 | add(int i, E e) | 객체 e 를 인덱스 i 에 추가 |
| 추가 | set(int i, E e) | 인덱스 i 에 저장된 객체를 객체 e 로 대체 |
| 탐색 | contains(E e) | 객체 e 가 저장되어 있는지 여부를 리턴 |
| 탐색 | get(int i) | 인덱스 i 에 저장된 객체를 리턴 |
| 탐색 | isEmpty() | 리스트가 비어있는지 여부를 리턴 |
| 탐색 | size() | 리스트 길이 리턴 |
| 삭제 | clear() | 리스트에 있는 모든 객체 삭제 |
| 삭제 | remove(int i) | 인덱스 i 에 저장된 객체를 삭제하고, 해당 객체 리턴 |
| 삭제 | remove(E e) | 객체 e 를 삭제 (+ 성공 여부 리턴) |
객체 삭제 시, 뒤의 인덱스들이 1씩 당겨지고 리스트의 길이가 줄어든다.
가장 흔하게 사용되는 리스트 인터페이스로, 배열과 달리 객체를 제한없이 추가할 수 있다.
List<E> list = new ArrayList<>(); // 지정된 타입 객체만 저장
List list = new ArrayList(); // 모든 타입 객체를 저장
ArrayList 와 동일한 구조지만, 멀티 스레드에서 각 스레드가 Vector 리스트를 동시에 편집할 수 없으므로, 멀티스레드 환경에서 안전하다.
List<E> list = new Vector<>();
List list = new Vector();
연결리스트의 구조를 사용하지만, 사용 방법은 ArrayList 와 동일하다.
삭제 / 삽입이 빈번하게 발생할 경우 효율적이다.
List<E> list = new LinkedList<>();
List list = new LinkedList();
집합, 순서 없음, 인덱스X, 중복X
| 분류 | 메서드 | 역할 |
|---|---|---|
| 추가 | add(E e) | 객체 e 를 추가 ( + 성공 여부 리턴, 중복이면 false ) |
| 탐색 | contains(E e) | 객체 e 가 저장되어 있는지 여부를 리턴 |
| 탐색 | isEmpty() | 집합이 비어있는지 여부를 리턴 |
| 탐색 | size() | 집합 길이 리턴 |
| 탐색 | iterator() | 집합에 저장된 객체를 한 개씩 리턴 |
| 삭제 | clear() | 집합에 있는 모든 객체 삭제 |
| 삭제 | remove(E e) | 객체 e 를 삭제 (+ 성공 여부 리턴) |
가장 흔하게 사용되는 Set 인터페이스
Set<E> set = new HashSet<>();
Set set = new HashSet();
객체의 주소가 달라도 hashCode() 가 같고 equal() 에서 true 면 중복으로 처리한다.
클래스 E 안에서 hashCode() 와 equal() 메서드를 재정의하여 중복 처리 옵션을 수정할 수 있다.
Iterator<E> iterator = set.iterator();
while( iterator.hasNext() ) { // 안 가져온 객체가 남아있는지 확인
E e = iterator.next(); // 현재 객체 가져오기
iterator.remove(); // 현재 객체 제거
}
또는 for(E e : set) 반복문을 사용할 수 있다.
이진트리를 기반으로 하는 set 컬렉션으로, 효율적인 탐색이 가능하다.
key : value 쌍으로 이루어진 엔트리 객체를 저장한다.
key 는 중복으로 저장할 수 없고 value 는 중복으로 저장할 수 있다.
| 분류 | 메서드 | 역할 |
|---|---|---|
| 추가 | put(K key, V value) | 키 : 값 쌍 저장 (+ 성공 시 값을 리턴) |
| 탐색 | get(K key) | 키로 값을 조회, 값을 리턴 |
| 탐색 | containsKey(K key) | 해당 키가 있는지 여부를 리턴 |
| 탐색 | containsValue(V value) | 해당 값이 있는지 여부를 리턴 |
| 탐색 | isEmpty() | Map 이 비어있는지 여부 리턴 |
| 탐색 | size() | 키의 총 개수 리턴 |
| 탐색 | keySet() | 저장된 모든 키를 set 에 담아서 리턴 |
| 탐색 | values() | 저장된 모든 값을 collection 에 담아서 리턴 |
| 탐색 | entrySet() | 모든 Entry 를 set 에 담아서 리턴 |
| 삭제 | clear() | 모든 Entry 삭제 |
| 삭제 | remove(K key) | 해당 키와 값 쌍을 삭제하고, 값을 리턴 |
Map<K, V> map = new HashMap<>();
Map map = new HashMap(); // 모든 타입 저장 (거의 안씀)
HashMap 과 동일한 구조지만, 멀티 스레드에서 각 스레드가 HashTable 맵을 동시에 편집할 수 없으므로, 멀티스레드 환경에서 안전하다.
Map<K, V> map = new HashTable<>();
Map map = new HashTable(); // 모든 타입 저장 (거의 안씀)
이진트리를 기반으로 하는 Map 컬렉션으로, 효율적인 탐색이 가능하다. 트리에 키:값 엔트리가 저장되며 키를 기준으로 정렬된다.
Stack<E> stack = new Stack<>();
stack.push(E e);
E popE = stack.pop();
큐는 LinkedList 를 이용해서 생성한다.
Queue <E> queue = new LinkedList<>();
queue.offer(E e); // 넣기
E pollE = queue.poll(); // 빼기