고급자바
Set 인터페이스-22.03.25
AIN99
2022. 3. 25. 12:29
728x90
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.print.attribute.HashAttributeSet;
public class T05_SetTest {
public static void main(String[] args) {
Set hs1=new HashSet();
//Set 데이터를 추가할 때도 add()메서드를 사용한다.
hs1.add("DD");
hs1.add("AA");
hs1.add(2);
hs1.add("CC");
hs1.add("BB");
hs1.add(1);
hs1.add(3);
System.out.println("Set 데이터:"+hs1);
System.out.println();
//Set은 데이터의 순서(인덱스)가 없고, 중복을 허용하지 않는다.
//그래서 이미 있는 데이터를 add하면 false를 반환하고, 데이터는 추가되지 않는다.
boolean isAdded=hs1.add("FF");
System.out.println("중복되지 않을 때: "+isAdded);
System.out.println("Set 데이터: "+hs1);
System.out.println();
isAdded=hs1.add("CC");
System.out.println("중복될 때: "+isAdded);
System.out.println("Set 데이터: "+hs1);
System.out.println();
//Set의 데이터를 수정하려면 수정하는 명령이 따로 없기 떄문에 해당 자료를 삭제한후 새로운
//데이터를 추가해 주어야 한다.
//삭제하는 메서드
//1) Clear() =>Set 데이터 전체 삭제
//2)remove(삭제할 자료) =>해당 자료 삭제
//예) 'FF'를 'EE'로 수정하기
hs1.remove("FF");
System.out.println("삭제 후 Set 데이터: "+hs1);
System.out.println();
hs1.add("EE"); //EE자료 추가
System.out.println("Set 데이터: "+hs1);
System.out.println();
//hs1.clear(); //전체 자료 삭제
//System.out.println("clear 후 Set 데이터:"+hs1);
System.out.println("Set의 자료 개수: "+hs1.size());
System.out.println();
//Set은 데이터의 순서가 없기 때문에 List처럼 인덱스를 이용해 하나씩 불러올 수 없다.
//그래서 데이터를 하나씩 얻기 위해서는 Iterator를 이용해야 한다.=> Set객체의 iterator() 메서드를 호출하면 된다.
Iterator it=hs1.iterator();
//데이터 개수만큼 반복하기
//hasNext() =>포인터 다음 위치에 데이터가 있으면 true, 없으면 false를 반환한다.
while(it.hasNext()) { //다음자료가 있는지 검사... next() =>포인터를 다음 자료 위치로 이동하고, 이동한 위치의 자료를 반환한다.
System.out.println(it.next());
}
//1~100사이의 중복되지 않는 정수 5개 만들기
Set<Integer> intRnd=new HashSet<Integer>();
while(intRnd.size()<5) {
int num=(int) (Math.random()*100+1);
intRnd.add(num);
}
System.out.println("만들어진 난수들: "+intRnd);
//Collection유형의 객체들은 서로다른 자료구조로 쉽게 변경해서 사용할 수 있다.
//다른 종류의 객체를 생성할 때 생성자에 변경할 데이터를 넣어주면 된다.
List<Integer> intRndList= new ArrayList<Integer>(intRnd);
System.out.println("List의 자료출력...");
for(int i=0; i<intRndList.size();i++) {
System.out.println(intRndList.get(i));
}
}
}
<Set은 Iterator말고 향상된 for문으로도 출력이 가능하다.>
for(Object list1:hs1) {
System.out.print(list1+" ");
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
public class T06_SetTest {
/**
* TreeSet 예제
* @param args
*/
public static void main(String[] args) {
//TreeSet은 자동 정렬 기능이 들어가 있다. 검색 속도 빠르다~
TreeSet<String> ts =new TreeSet<String>();
List<String> abcList=new ArrayList<String>();
//영어 대문자를 문자열로 변환하여 List에 저장
for(char ch='A'; ch<='Z'; ch++) {
String temp=String.valueOf(ch);
abcList.add(temp);
}
Collections.shuffle(abcList);
System.out.println("abcList자료: "+abcList);
for(String str:abcList) {
ts.add(str);
}
System.out.println("TreeSet 자료:"+ts);
/*
* TreeSet에 저장된 자료 중 특정한 자료보다 작은 자료를 찾아서 SortedSet으로 반환하는 메서드가 있다.
* =>headSet(기준값) => 기본적으로 '기준값'은 포함시키지 않는다. 즉 머리를 기준으로 작은것
* =>headSet(기준값,논리값) => 논리값이 true이면, '기준값' 포함함.
*/
SortedSet<String> ss1=ts.headSet("K");
System.out.println("K 이전자료: "+ss1); //기준값 미포함
System.out.println("K 이전자료(기준값 포함): "+ts.headSet("K",true));
/* '기준값' 보다 큰 자료를 찾아 SortedSet으로 반환하는 메서드
* tailSet(기준값) => 기본적으로 '기준값'을 포함시킨다.
* tailSet(기준값, 논리값) => 논리값이 false이면 '기준값' 미포함.*/
SortedSet<String> ss2= ts.tailSet("K");
System.out.println("K 이후자료: "+ss2); //기준값 포함
System.out.println("K 이후자료(기준값 미포함): "+ts.tailSet("K",false));
/* subSet(기준값1,기준값2) => 기준값1 ~ 기준값2 사이의 값을 가져옴.
* ('기준값1' 포함, '기준값2' 미포함)
* subSet(기준값1, 논리값1, 기준값2, 논리값2)
* => 각 기준값을 포함할지 여부를 설정한다.
* (논리값이 true이면 포함, false이면 미포함) */
System.out.println("K (포함)부터 N(미포함) 까지: "
+ts.subSet("K", "N"));
System.out.println("K (포함)부터 N(포함) 까지: "
+ts.subSet("K",true, "N",true));
System.out.println("K (미포함)부터 N(미포함) 까지: "
+ts.subSet("K",false, "N",false));
System.out.println("K (미포함)부터 N(포함) 까지: "
+ts.subSet("K", false,"N",true));
}
}
728x90