만약 요소의 저장 순서를 유지해야 한다면 LinkedHashSet 클래스를 사용하면 된다.
JDK 1.4부터 제공
사용 예시
HashSet<String>hs01=newHashSet<String>();HashSet<String>hs02=newHashSet<String>();//add() 메소드를 이용한 요소의 저장hs01.add("홍길동");hs01.add("이순신");System.out.println(hs01.add("임꺽정"));System.out.println(hs01.add("임꺽정"));// 중복된 요소의 저장//Enhanced for 문과 get() 메소드를 이용한 요소의 출력for(Stringe:hs01){System.out.print(e+" ");}//add() 메소드를 이용한 요소의 저장hs02.add("임꺽정");hs02.add("홍길동");hs02.add("이순신");//iterator() 메소드를 이용한 요소의 출력Iterator<String>iter02=hs02.iterator();while(iter02.hasNext()){System.out.print(iter02.next()+" ");}//size() 메소드를 이용한 요소의 총 개수System.out.println("집합의 크기 : "+hs02.size());
해시 알고리즘(hash algorithm)
해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘
Java에서 해시 알고리즘을 이용한 자료구조는 배열과 연결 리스트로 구현된다.
저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구한다.
그리고서 해당 인덱스에 저장된 연결 리스트에 데이터를 저장하게 된다.
TreeSet<E> 클래스
데이터가 정렬된 상태로 저장되는 이진 검색 트리(binary search tree)의 형태로 요소를 저장한다.
이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.
NavigableSet 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다.
요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.
Set 인터페이스를 구현했기 때문에
JDK 1.2부터 제공된다.
사용 예시
TreeSet<Integer>ts=newTreeSet<Integer>();//add() 메소드를 이용한 요소의 저장ts.add(30);ts.add(40);ts.add(20);ts.add(10);//Enhanced for 문과 get() 메소드를 이용한 요소의 출력for(inte:ts){System.out.print(e+" ");}//remove() 메소드를 이용한 요소의 제거ts.remove(40);//iterator() 메소드를 이용한 요소의 출력Iterator<Integer>iter=ts.iterator();while(iter.hasNext()){System.out.print(iter.next()+" ");}//size() 메소드를 이용한 요소의 총 개수System.out.println("이진 검색 트리의 크기 : "+ts.size());//subSet() 메소드를 이용한 부분 집합의 출력System.out.println(ts.subSet(10,20));System.out.println(ts.subSet(10,true,20,true));