YJ의 새벽
JAVA (HashSet, TreeSet) 본문
--Set : 순서X , 중복X
- HashSet
--Set 인터페이스 대표적인 컬렉션 클래스
--순서를 유지하려면 LinkedHashSet 클래스 사용하면 된다.
EX))) HashSet Example
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample1 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("java");
set.add("JDBC");
set.add("Servlet/JSP");
set.add("java");
set.add("iBATIS");
System.out.println(set.size()); // 중복"java"제외 4
Iterator<String> iterator = set.iterator(); //iterator 생성
while(iterator.hasNext()) { // java, JDBC, Servlet/JSP, iBATIS
System.out.print(iterator.next()+" ");
}
set.remove("JDBC"); // "JDBC" 삭제
System.out.println(set.size()); // 3
for(String str : set) { // java, Servlet/JSP, iBATIS
System.out.print(str+" ");
}
System.out.println();
set.clear(); //set 비우기
if(set.isEmpty()) {
System.out.println("set이 비어있음");
}else {
System.out.println("값이 있음");
}
}
}
EX))) HashSet Example ( LinkedList 를 이용하여 정렬 )
import java.util.*;
public class Example {
public static void main(String[] args) {
Set set = new HashSet();
for(int i =0; set.size()<6 ; i++) { // 45이하 난수 발생
int num = (int)(Math.random()*45)+1;
set.add(num);
}
System.out.println(set); //정렬없이 set에 저장
List list = new LinkedList(set);
Collections.sort(list); //링크드리스트 사용 정렬
System.out.println(list); // 정렬된 list(set) 값.
}
}
EX))) HashSet을 이용 객체 저장.
--중복된 객체를 체크하려면 equals()와 hashCode() 를 재정의해야한다.
import java.util.HashSet;
import java.util.Set;
class Member {
public String name;
public int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member)obj;
return member.name.equals(name)&&member.age==age;
}else {
return false;
}
}
@Override
public int hashCode() {
return name.hashCode()+age;
}
}
public class HashSetExample2 {
public static void main(String[] args) {
Set<Member> hashSet = new HashSet<>();
set.add(new Member("김자바",30));
set.add(new Member("김자바",30));
System.out.println(hashSet.size()); //중복값 저장안함. = 1
}
}
--------------------------------------------------------------------------------------------------------------------------------
- TreeSet
--이진 탐색트리 (binary search tree)
-- 부모보다 작은값은 왼쪽, 큰값은 오른쪽에 저장. (저장하며 정렬됨 )
-- 데이터가 많아질수록 추가,삭제 시간이 더 걸림. ( 비교 횟수 증가 )
--범위 검색과 정렬에 유리한 컬렉션 클래스
--HashSet보다 데이터 추가,삭제에 시간이 더 걸림.
EX ))) TreeSet Example ( 정렬을 하며 저장하기에 정렬 필요없음 )
import java.util.*;
public class Example {
public static void main(String[] args) {
Set treeSet = new TreeSet();
for(int i =0; treeSet.size()<6 ; i++) { //45 이하 난수 저장.
int num = (int)(Math.random()*45)+1;
treeSet.add(num);
}
System.out.println(treeSet); //정렬된값.
}
}
EX))) TreeSet Example2
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetExample1 {
public static void main(String[] args) {
TreeSet<Integer> scores = new TreeSet<Integer>();
scores.add(87);
scores.add(98);
scores.add(75);
scores.add(93);
scores.add(80); // 87,98,75,93,80 저장
int score = 0;
score = scores.first();
System.out.println("가장낮은" +score); //75 first
score = scores.last();
System.out.println("가장높은" +score); //98 last
score = scores.lower(95);
System.out.println("95보다 낮은" +score); //93 lower
score = scores.higher(95);
System.out.println("95보다 높은" +score); //98 higher
score = scores.floor(95);
System.out.println("95보다 같거나작은" +score); // 93 floor
score = scores.ceiling(95);
System.out.println("95보다 같거나큰" +score); // 98 ceiling
// scores.headSet(80); <<80보다 작은값
// scores.tailSet(80); <<80보다 큰값
System.out.println();
Iterator<Integer> iterator = scores.iterator();
while ( iterator.hasNext()) {
int value = iterator.next();
System.out.println(value);
} // 75 , 80 , 87 , 93, 98
NavigableSet<Integer> descendingSet= scores.descendingSet();
for( Integer score2 : descendingSet) {
System.out.print(score2+" ");
} //역순 98 93 87 80 75
}
}
EX))) TreeSetExample3 (문자열검색)
import java.util.NavigableSet;
import java.util.TreeSet;
public class TreeSetExample3 {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("apple");
treeSet.add("forever");
treeSet.add("description");
treeSet.add("ever");
treeSet.add("zoo");
treeSet.add("base");
treeSet.add("guess");
treeSet.add("cherry");
System.out.println("c~f 사이 단어검색");
NavigableSet<String> rangeSet = treeSet.subSet("c", true, "f", true);
for (String word : rangeSet) {
System.out.println(word);
}
// 혹은
//treeSet.subSet("c","f");
}
}
'SelfStudy > JAVA' 카테고리의 다른 글
JAVA (Collections), 컬렉션 요약정리. (0) | 2023.02.03 |
---|---|
JAVA (HashMap) (2) | 2023.02.03 |
JAVA (Comparable , Comparator) (0) | 2023.02.02 |
JAVA (Iterator, Arrays) (0) | 2023.02.02 |
JAVA (Stack,Queue) (0) | 2023.02.02 |
Comments