컬렉션 프레임워크
자바는 널리 알려져 잇는 자료 구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련된 인터페이스와 클래스들을
java.util 패키지에 포함시켜 놓았습니다. 이를 총칭해서 컬렉션 프레임워크 라고 부릅니다.
Interface | Interface / Class | 특징 | 구현 클래스 |
Collection | List | - 순서를 유지하고 저장 - 중복 저장 가능 |
ArrayList, Vector, LinkedList |
Set | - 순서를 유지 X - 중복 저장 X |
HashSet, TreeSet | |
Queue | - 선입선출(First-In-First-Out) | LinkedList | |
Map | - 키와 값으로 구성된 엔트리로 저장 - 키는 중복 저장 X |
HashMap, Hashtable, TreeMap, Properties |
|
Vector | - 후입선출(Last-In-First-Out) | Stack |
Set 컬렉션
Set 컬렉션은 저장 순서를 유지하지 않고 객체를 중복해서 저장할 수 없기에 하나의 null만 저장할 수 있습니다. Set 컬렉션은 수학의 집합에 비유될 수 있는데 집합은 순서와 상관없고 중복이 허용되지 않기 때문입니다.
즉, 값을 넣은 순서와 찾을 때 순서가 다를 수 있습니다.
Set 인터페이스 메서드
기능 | 메서드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 성공적으로 저장하면 true를 리턴하고 중복 객체면 false를 리턴 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
Iterator<E> iterator() | 저장된 객체를 한 번씩 가져오는 반복자 리턴 | |
int size() | 저장되어 있는 전체 객체 수 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
HashSet 클래스
Set 컬렉션 중에서 가장 많이 사용되는 것이 HashSet 입니다. HashSet은 동일한 객체는 중복 저장하지 않습니다. 여기서 '동일한 객체' 란 '동등 객체'를 말합니다. HashSet은 다른 객체라도 hashCode() 메서드의 리턴 값이 같고, equals() 메서드가 true를 리턴하면 동일한 객체라고 판단하고 중복 저장하지 않습니다.
Set<E> set = new HashSet<E>(); // E에 지정된 타입의 객체만 저장
Set<E> set = new HashSet<>();
같음 true
hashCode() 리턴값 ----------> equals() 리턴값 ----------> 동등 객체
| | false
| |
---------------------> 다른 객체
다름
Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메서드는 없습니다. 대신 객체를 한 개 씩 반복해서 가져와야 하는데, 2가지 방법이 있습니다.
1. for문 이용
Set<E> set = new HashSet<>();
for(E e : set) {
...
}
2. iterator() 메서드 이용
리턴 타입 | 메서드명 | 설명 |
boolean | hasNext() | 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴 |
E | next() | 컬렉션에서 하나의 객체를 가져옵니다. |
void | remove() | next()로 가져온 객체를 Set 컬렉션에서 제거합니다. |
Set<E> set = new HashSet<>();
Iterator<E> iterator = set.iterator();
while(iterator.hasNext()) {
E e = iterator.next();
}
TreeSet 클래스
TreeSet은 검색 기능을 강화시킨 클래스로 이진 트리를 기반으로 한 Set 컬렉션 입니다. Tree에 객체를 저장하면 다음과 같이 자동으로 정렬(오름차순)됩니다. 부모 노드의 객체와 비교해서 낮은 것은 왼쪽 자식 노드에, 높은 것은 오른쪽 자식 노드에 저장합니다.
TreeSet<E> treeSet = new TreeSet<E>(); // E에 지정된 타입의 객체만 저장
TreeSet<E> treeSet = new TreeSet<>();
Set 타입 변수에 대입해도 되지만 TreeSet 타입으로 대입한 이유는 검색 관련 메소드가 TreeSet에만 저장되어 있기 때문입니다.
리턴 타입 | 메서드 | 설명 |
E | first() | 제일 낮은 객체를 리턴 |
E | last() | 제일 높은 객체를 리턴 |
E | lower(E e) | 주어진 객체보다 바로 아래 객체를 리턴 |
E | higher(E e) | 주어진 객체보다 바로 위 객체를 리턴 |
E | floor(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 만약 없다면 주어진 객체의 바로 아래의 객체를 리턴 |
E | ceiling(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 만약 없다면 주어진 객체의 바로 위 객체를 리턴 |
E | pollFirst() | 제일 낮은 객체를 꺼내오고 컬렉션에서 제거 |
E | pollLast() | 제일 높은 객체를 꺼내오고 컬렉션에서 제거 |
Iterator<E> | descendingIterator() | 내림차순으로 정렬된 Iterator를 리턴 |
NavigableSet<E> | descendingSet() | 내림차순으로 정렬된 NavigableSet을 리턴 |
NavigableSet | headSet(E, true or false) | 주어진 객체보다 낮은 객체들을 NavigableSet으로 리턴 주어진 객체 포함 여부는 두 번째 매개 값에 따라 달라짐 |
NavigableSet | tailSet(E, true or false) | 주어진 객체보다 높은 객체들을 NavigableSet으로 리턴 주어진 객체 포함 여부는 두 번째 매개 값에 따라 달라짐 |
NavigableSet | subSet(E, true or false, E, true or false) | 시작과 끝으로 주어진 객체 사이의 객체들을 NavigableSet으로 리턴 주어진 객체 포함 여부는 두 번째, 네번 째 매개 값에 따라 달라짐 |
'Java > 기초문법' 카테고리의 다른 글
[Java] 컬렉션 자료구조 - LIFO와 FIFO 컬렉션 (1) | 2024.09.16 |
---|---|
[Java] 컬렉션 자료구조 - Map 컬렉션 (0) | 2024.09.16 |
[Java] 컬렉션 자료구조 - List 컬렉션 (0) | 2024.09.16 |
[Java] 익명 클래스 (0) | 2024.09.11 |
[Java] Java를 통해 계산기 만들기(2) (0) | 2024.09.09 |