Set
- 집합
- 중복된 값을 허용하지 않는다.
- 이미 존재하는 데이터인지 어떻게 알지?
Search가 필요!
" Set = 선형 데이터구조 + 탐색 알고리즘 "
- Set은 순서를 보장하지 않는다.
HashSet, LinkedHashSet, TreeSet
- java.lang.Object (>) java.util.AbstractCollection (>) java.util.AbstractSet (>) java.util.HashSet
- HashSet을 implements 하는 인터페이스 : Set
- 동기화 지원하지 않음
- 내부에서 HashTable을 사용하여 이미 같은 값이 존재하는지 확인 (bucket)
=> 객체를 저장할 경우 hashCode를 구현해줘야 함
- 이외에 LinkedHashSet, TreeSet 있음
각각 LinkedList, binary search Tree를 사용하여 만들어져 있음
- HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 오름차순으로 자동정렬을 해준다는 차이점이 있다. LinkedHashSet은 입력된 순서대로 데이터를 관리한다.
Set 기본함수
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.remove(1);
List의 중복 요소 제거
List<String> list = Arrays.asList("A", "B", "C", "A", "B", "C");
Set<String> set = new HashSet<>(list);
List<String> list2 = new LinkedList<>(set);
집합
Set<Integer> setA = new LinkedHashSet<>();
// A
setA.add(1);
setA.add(2);
setA.add(3);
// B
setA.add(2);
setA.add(3);
setA.add(4);
=> setA : [1, 2, 3, 4]
Set<Integer> setA = new LinkedHashSet<>();
Set<Integer> setB = new LinkedHashSet<>();
// A
setA.add(1);
setA.add(2);
setA.add(3);
// B
setB.add(2);
setB.add(3);
setB.add(4);
setA.removeAll(setB);
=> setA : [1]
Set<Integer> setA = new LinkedHashSet<>();
Set<Integer> setB = new LinkedHashSet<>();
// A
setA.add(1);
setA.add(2);
setA.add(3);
// B
setB.add(2);
setB.add(3);
setB.add(4);
setA.retainAll(setB);
=> setA : [2, 3]