해시 테이블에 데이터를 저장하며 HashSet
과는 다르게 저장된 순서에 따라 순서가 결정된다. 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근이 가능하다.
LinkedHashSet 예제
import java.util.Set;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class TestHashSet {
public static void main(String[] args) {
Set<String> linkedHashSet = new LinkedHashSet<String>();
linkedHashSet.add("Java");
linkedHashSet.add("Oracle");
linkedHashSet.add("Sun");
linkedHashSet.add("Java");
// 저장 순서가 유지된다.
System.out.println(linkedHashSet); // [Java, Oracle, Sun]
Iterator<String> iter = linkedHashSet.iterator();
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // true
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // false
}
}
정렬 기능이 추가되었으며 동일한 객체는 여전히 중복 저장하지 않는다. 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있다. 범위 검색 작업에 효과적이며 레드블랙트리 구조를 사용한다.
HashSet 보다 느리지만 삽입과 동시에 정렬할 때 사용
TreeSet 예제
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;
public class TestHashSet {
public static void main(String[] args) {
Set<String> treeSet = new TreeSet<String>();
treeSet.add("5. 아이스크림");
treeSet.add("3. 꽈배기");
treeSet.add("2. 과자");
treeSet.add("4. 요구르트");
treeSet.add("1. 물");
// 자동으로 정렬되어 출력된다.
System.out.println(treeSet); // [1. 물, 2. 과자, 3. 꽈배기, 4. 요구르트, 5. 아이스크림]
Iterator<String> iter = treeSet.iterator();
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // true
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // false
}
}