반응형
Set
- 저장 순서가 유지되지 않고, 같은 요소의 중복 저장을 허용하지 않음
(null값도 중복되지 않게 하나의 null값만 저장)
구현 클래스 : HashSet, LinkedHashSet, TreeSet
Set 계열 주요 메소드
HashSet
: Set 컬렉션 클래스에서 가장 많이 사용 되는 클래스
HashSet 특징
: set에 객체를 저장할 때 hash 함수를 사용하여 처리 속도가 빠름
동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음
HashSet 객체 생성
Set<String> hset = new HashSet<>();
저장 순서가 유지 되지 않음
hset.add(new String("java")); //hset.add("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]
값이 같은 동등 객체도 중복 저장 X
hset.add(new String("java"));
=> 한번 만들고 생성자로 다시 말들어서 동일객체x 동등객체o
System.out.println(hset);
출력 결과
[css, java, oracle, jdbc, html]
contains()
:지정된 객체를 포함하고 있는지 알려줌
값이 같은 동등 객체를 이용해 포함 여부 확인
System.out.println("포함 여부 확인 : " + hset.contains(new String("oracle")));
출력 결과
포함 여부 확인 : true
String 클래스 내에 hashCode, equlas 메소드가 오버라이딩 되어 동등 객체 처리가 가능한 것으로, 직접 만드는 클래스에서 동일한 처리가 될 수 있도록 하려면 hashCode, equlas 메소드를 오버라이딩 해야 함.
반응형
size() 로 요소 개수 확인 가능
System.out.println("저장 된 객체 수 : " + hset.size());
출력 결과
저장 된 객체 수 : 5
저장 된 객체를 꺼내는 방법
: 해당 기능은 따로 없으며, 인덱스로 접근하는 반복문 사용이 불가능 함
toArray(), iterator (), 향상된 for문을 활용
1) toArray()로 배열로 변경한 뒤 반복문 사용
- Object[] toArray() : 저장된 객체들을 개체배열의 형태로 반환
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 : htm
2) iterator() 로 목록 만들어 연속 처리
Iterator<String> iter = hset.iterator();
while(hset.hasNext()) {
System.out.println(iter.next());
}
출력 결과
css
java
oracle
jdbc
html
3) 향상된 for문 사용
for(String str : hset) {
System.out.println("str : " + str);
}
출력 결과
str : css
str : java
str : oracle
str : jdbc
str : html
clear() 로 저장된 모든 객체 지우기
hset.clear();
isEmpty() 로 HashSet이 비어있는지 확인하기
System.out.println("empty? : " + hset.isEmpty());
출력 결과
empty? : true
LinkedHashSet
HashSet과 거의 동일하지만 저장 순서를 유지함
JDK 1.4부터 제공
LinkedHashSet 객체 생성
Set<String> lhset = new LinkedHashSet<>();
저장순서 확인하기
lhset.add("java");
lhset.add("oracle");
lhset.add("jdbc");
lhset.add("html");
lhset.add("css");
System.out.println(lhset);
출력 결과
[java, oracle, jdbc, html, css]
오름차순 정렬
: 만들어진 LinkedHashSet 을 TreeSet으로 객체를 생성하면, 같은 타입의 객체를 자동으로 비교하여 오름차순으로 정렬 함
TreeSet<String> tset = new TreeSet(lhset);
System.out.println(tset);
출력 결과
[css, html, java, jdbc, oracle]
TreeSet
- 데이터가 정렬 된 상태로 저장 되는 이진 검색 트리의 형태로 요소 저장
- 이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠름
- Set 인터페이스가 가지는 특징을 그대로 가지지만 정렬 된 상태를 유지한다는 점이 다름
TreeSet 객체 생성
Set<String> tset = 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]
=> 저장 순서와 상관 없이 오름차순 정렬 된 상태로 출력
Iterator 출력 해보기
Iterator <String> iter = tset.iterator();
while(tset.hasNext()){
System.out.println(iter.next());
}
출력 결과
css
html
java
jdbc
oracle
TreeSet의 특징을 이용하여 로또 번호 발생기 만들기
Set<Integer> lotto = new TreeSet<>();
while(lotto.size() < 6){
lotto.add((int)(Math.random() * 45) + 1);
}
System.out.println(lotto);
출력 결과
[2, 10, 19, 22, 25, 37]
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바/Java] File 클래스 (0) | 2022.09.10 |
---|---|
[자바 /Java] Map 인터페이스 (HashMap / Properties) (0) | 2022.09.07 |
[자바 / Java ] List 인터페이스 ( ArrayList , LinkedList, Stack, Queue ) (0) | 2022.09.04 |
[자바 / Java] Iterator() , descendingIterator(), Comparable, Comparator (0) | 2022.09.04 |
[자바/ JAVA] 컬렉션(Collection)이란? (0) | 2022.09.04 |