Set
- Set인터페이스를 구현한 Set컬렉션 클래스
- 저장 순서 유지X, 같은 요소의 중복 저장X (null값도 중복되지 않게 하나의 null만 저장)
- 구현클래스 : HashSet, LinkedHashSet, TreeSet
HashSet 클래스
- Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다.
- JDK 1.2부터 제공되고 있으며 해시 알고리즘을 사용하여 검색 속도가 빠르다는 장점을 가진다.
- 동일 인스턴스 뿐 아니라 동등 인스턴스도 중복하여 저장하지 않는다.
(동일 : 완전히 같음 / 동등 : 다른 인스턴스이지만 속성 값 같음)
HashSet 인스턴스 생성
HashSet<String> hset = new HashSet<>();
다형성 적용하여 상위 인터페이스를 타입으로 사용가능
//Set hset2 = new HashSet();
//Collection hset3 = new HashSet();
hset.add(new String("java"));
hset.add(new String("oracle"));
hset.add(new String("jdbc"));
hset.add(new String("html"));
hset.add(new String("css"));
출력해보면 저장 순서 유지 안된다.
System.out.println(hset);
//[css, java, oracle, jdbc, html]
중복도 허용 안됨
hset.add(new String("java"));
System.out.println(hset);
//[css, java, oracle, jdbc, html]
객체 수 확인 size()
포합 여부 확인 contains()
System.out.println("저장 된 객체 수 : " + hset.size());
System.out.println("포함 여부 확인 : " + hset.contains(new String("oracle")));
출력값=>
저장 된 객체 수 : 5
포함 여부 확인 : true
저장된 객체를 하나씩 꺼내는 기능이 없다.
반복문을 이용한 연속 처리 하는 방법
1. toArray()로 배열로 변경한 뒤 for loop 사용
Object[] arr = hset.toArray();
for(int i = 0; i < arr.length; i++) {
System.out.println(i + " : " + arr[i]);
}
출력값=>
0 : css
1 : java
2 : oracle
3 : jdbc
4 : html
2. iterator()로 목록 만들어 연속 처리
Iterator<String> iter = hset.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
출력값=>
css
java
oracle
jdbc
html
지우는 법 clear()
값이 비었는지 확인 isEmpty()
hset.clear();
System.out.println("empty? : " + hset.isEmpty()); //true
LinkedhashSet
- HashSet이 가지는 기능을 모두 가지고 있다.
- 추가적으로 저장 순서를 유지하는 특징을 가진다.
- JDK 1.4부터 제공
LinkedHashSet<String> lhset = new LinkedHashSet<>();
lhset.add("java");
lhset.add("oracle");
lhset.add("jdbc");
lhset.add("html");
lhset.add("css");
System.out.println("lhset : " + lhset);
//lhset : [java, oracle, jdbc, html, css]
만들어진 링크해쉬셋을 가지고 트리셋으로 객체를 생성하면 같은 타입의 객체를 자동으로 비교하여 오름차순 정렬한다.
TreeSet<String> tset = new TreeSet<>(lhset);
System.out.println(tset);
//[css, html, java, jdbc, oracle]
TreeSet
- 데이터가 정렬된 상태로 저장되는 이진 검색 트리의 형태로 요소를 저장한다.
- 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성
- 이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.
- Set 인터페이스가 가지는 특징을 그대로 가지지만 정렬된 상태를 유지한다는 것이 다른 점이다.
- JDK 1.2 부터 제공
TreeSet<String> tset = new TreeSet<>();
//Set<String> tset2 = new TreeSet<>();
tset.add("java");
tset.add("oracle");
tset.add("jdbc");
tset.add("html");
tset.add("css");
/* 자동 오름차순 정렬 */
System.out.println(tset);
[css, html, java, jdbc, oracle]
목록 만들어서 하나씩 대문자로 변경해서 출력 처리 toUperCase()
Iterator<String> iter = tset.iterator();
while(iter.hasNext()) {
System.out.println(iter.next().toUpperCase());
}
CSS
HTML
JAVA
JDBC
ORACLE
배열로 바꾸어 연속 처리하기(위와 출력값 동일) toArray()
Object[] arr = tset.toArray();
for(Object obj : arr) {
System.out.println(((String)obj).toUpperCase());
}
로또 번호 발생기 (TreeSet 특징 이용)
Set<Integer> lotto = new TreeSet<>();
while(lotto.size() < 6) {
lotto.add((int)(Math.random() * 45) + 1);
}
System.out.println("lotto : " + lotto);
'TIL > Java' 카테고리의 다른 글
[Java] 예외 처리(Exception) - Throws, try-catch, multi-catch, 사용자정의 Exception, try-with-resource, Exception 오버라이딩 (0) | 2022.01.13 |
---|---|
[Java] 컬렉션(Collection) - 4. Map(HashMap, Properties) (0) | 2022.01.13 |
[Java] 컬렉션(Collection) - 2. List(LinkedList), Stack, Queue (0) | 2022.01.13 |
[Java] 컬렉션(Collection) - 1. List(ArrayList) (0) | 2022.01.13 |
[Java] 제네릭(Generic), WildCard (0) | 2022.01.13 |