//Set 계열
- 순서가 없는 배열
- 첨자가 없음
- 중복값을 가질 수 없다.
//HashSet
- Set 인터페이스 구현한 컬렉션
- 순서X, 중복값X
//Set은 순서가 중요하지 않은 집합으로 모든 요소 출력시 정렬되지 않은 상태로 출력
예제) 로또 번호 추출
1. ArrayList
ArrayList<Integer> nums = new ArrayList<Integer>();
Random rnd = new Random();
for(int i=0;i<6;i++){
int num = rnd.nextInt(45)+1; //1~45
boolean flag = false;
for(int j=0;i<i;j++){
if(num==num1.get(j)) { 난수 발생시 중복 숫자 X
flag = true;
break;
}
}
if(flag){
i--;
}else{
nums1.add(num);
}
}
System.out.println(nums1); //ArrayList요소 전체 출력
2. HashSet
HashSet<Integer> set = new HashSet<Integer>();
while(set.size()<6){ //6번 돌리는데 HashSet은 중복이 없기 떄문에 중복숫자 발생 X
int num= rnd.nextInt(45)+1;
set.add(num);
}
System.out.println(set); // HashSet요소 전체 출력
---------------------------------------------------
** set(HashSet) -> List<ArrayList<String>(set);
System.out.println(list);
Collection.sort(list); //정렬
System.out.println(list);
--------------------------------------------------------
예제) 합집합,교집합,차집합 구하기
//데이터 집합 2개
Set<String> setA = new HashSet<String>();
Set<String> setB = new HashSet<String>();
//결과 집합
Set<String> setHab = new HashSet<String>();
Set<String> setGyo = new HashSet<String>();
Set<String> setCha = new HashSet<String>();
setA.add("사과");
setA.add("오렌지");
setA.add("파인애플");
setA.add("바나나");
setA.add("아보카도");
setB.add("자두");
setB.add("파인애플");
setB.add("토마토");
setB.add("귤");
setB.add("바나나");
///교집합
Iterator<String> iter = setA.iterator();
while(iter.hasNext()){
String item = iter.next();
if(setB.contains(item)){
setGyo.add(item);
}
}
System.out.println("A ∩ B = " + setGyo);
//차집합
iter = setA.iterator();
while(iter.hasNext()) {
String item = iter.next();
if(!setB.contains(item)) {
setCha.add(item);
}
}//while
System.out.println("A - B = " + setCha);
//합집합 - 중복값을 허용하는 합집합 ->set(X), List(0);
LIst<String> listHab = new ArrayList<String>();
iter = setA.iterator();
while(iter.hasNext()){
String item = iter.next();
listHab.add(item);
}
iter = setB.iterator();
while(iter.hasNext(){
String item = iter.next();
listHab.add(item);
}
System.out.println("A ∪ B = " + listHab);