Set 컬렉션은 집합이란 의미를 가지는 set List 컬렉션과 다르게 저장 순서를 유지하지 않으며 중복도 허용되지 않는다. Set 컬렉션은 순서가 없기 때문에 인덱스를 통해 객체를 가져오는 메서드가 없는데 이는 컬렉션 인터페이스에서 제공하는 Iterator() 메서드로 대체할 수 있다.
Set 컬렉션의 대표적 클래스로는 HashSet, TreeSet이 있다.
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Kotlin");
// 출력 방법 1 (향상된 for문 이용)
for (String str : set) {
System.out.println(str);
}
// 출력 방법 2 (Iterator() 메서드 이용)
Iterator<String> it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
Iterator()메서드나 향상된 for문을 이용하여 가져올 수 있다.

이진 탐색 트리(Binary Search Tree)구조로 하나의 부모 노드가 최대 두 개의 자식 노드와 연결되는 이진 트리의 일종이다. 모든 왼쪽 자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식이 루트나 부모보다 큰 값을 가지는 특징이 있으며 정렬과 검색에 특화된 자료 구조이다. 정리하면 TreeSet은 HashSet과 마찬가지로 중복을 허용하지 않지만 오름차순으로 데이터를 저장하고 관리한다.
Set<Integer> tree = new TreeSet<>();
tree.add(7);
tree.add(4);
tree.add(9);
tree.add(1);
tree.add(5);
Iterator it = tree.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 출력 : [1, 4, 5, 7, 9]
위의 그림과 같이 오름차순으로 데이터를 저장하고 관리하기 때문에 출력시에도 오름차순으로 출력된다.
HashSet과 마찬가지로 중복을 허용하지 않지만 입력된 데이터가 입력된 순서로 저장하고 관리한다는 차이점이 있다.
Set<Integer> set = new LinkedHashSet<>();
set.add(3);
set.add(2);
set.add(5);
set.add(1);
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 출력 : [3, 2, 5, 1]