| 인터페이스 | 순서 | 중복 | 구현된 클래스 |
|---|---|---|---|
| Collection | x | o | (사실 개념만 있음→ 순서가 없으면 중복도 없어야하는데 이건 불가능해서 개념만 존재함) |
| Set | x | x | HashSet(넣었던 순서를 보장하지 못한다), TreeSet(자동적으로 정렬이 된다. 오름차순) |
| List | o | o | ArrayList(삽입,삭제가 빈번하면 효율이 떨어진다),LinkedList(포인터라고 생각하면 된다) |
| 메서드 | 설명 |
|---|---|
| boolean add(E e) | 컬렉션에 엘리먼트를 추가합니다. 추가되지 않을 때 false를 반환합니다. |
| void clear() | 컬렉션의 모든 엘리먼트를 삭제합니다. |
| boolean contains(Object o) | 컬렉션이 주어진 객체를 포함하면 true를 반환합니다. |
| boolean isEmpty() | 컬렉션이 비어있으면 true를 반환합니다. |
| Iterator<E> iterator() | 이 컬렉션의 iterator 객체를 반환합니다. |
| boolean | |
| remove(Object o) | 주어진 엘리먼트 객체를 제거합니다. |
| Object[] toArray() | 이 컬렉션의 모든 엘리먼트들을 배열로 반환합니다. |
| <T> T[] toArray(T[] a) | 컬렉션의 모든 엘리먼트들을 주어진 타입의 배열로 반환합니다. |
Set 인터페이스는 중복된 데이터를 저장할 수 없는 컬렉션입니다. 즉, 동일한 객체를 여러 번 추가하려 해도 하나만 저장됩니다.
또한, SortedSet 인터페이스는 저장된 객체를 오름차순으로 정렬하여 관리합니다. 이를 구현한 클래스에는 TreeSet과 ConcurrentSkipListSet이 있습니다.
| 메서드 | 설명 |
|---|---|
boolean add(E e) |
Set에 요소를 추가. 중복된 값이면 false 반환 |
void clear() |
Set의 모든 요소 삭제 |
boolean contains(Object o) |
특정 객체 포함 여부 확인 (true 반환) |
boolean isEmpty() |
Set이 비어있는지 확인 (true 반환) |
Iterator<E> iterator() |
Set의 iterator 객체 반환 |
boolean remove(Object o) |
특정 객체 제거 |
int size() |
Set의 요소 개수 반환 |
Object[] toArray() |
Set의 모든 요소를 배열로 반환 |
<T> T[] toArray(T[] a) |
Set의 모든 요소를 지정된 타입의 배열로 변환 |
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복 추가, 저장되지 않음
set.add("cherry");
System.out.println("Set 데이터: " + set); // 중복 제거 후 출력
set.remove("banana");
System.out.println("banana 제거 후 Set: " + set);
System.out.println("Set에 cherry 포함? " + set.contains("cherry"));
System.out.println("Set 크기: " + set.size());
set.clear();
System.out.println("clear() 후 Set이 비었는가? " + set.isEmpty());
}
}
HashSet은 중복된 데이터를 허용하지 않는 Set 컬렉션이며, 해시 테이블을 사용해 데이터를 저장합니다.
해시 테이블은 Key-Value 매핑을 통해 데이터를 관리하며, HashSet은 내부적으로 Key만 관리합니다.