add()
한 순서대로 출력된다는 보장이 없다!!ArrayList
또는 LinkedList
에 담기sort()
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Bingo {
public static void main(String[] args) {
// 1~50 중 25개를 골라서 5*5 빙고판 만들기
Set set = new HashSet();
int[][] board = new int[5][5];
// size 0~24까지 들어감 -> set.size() == 25
for(int i=0; set.size()<25; i++) {
set.add((int)(Math.random()*50) + 1 + "");
//1<=x<51 -> String,,
//아래 parseInst(String)때문에 이런걸까?? ClassCastException
}
Iterator it = set.iterator();
for(int i=0; i<board.length; i++) {
for(int j=0; j<board[i].length; j++) {
board[i][j] = Integer.parseInt((String) it.next());
//**parseInt(String) :: String을 매개로 받고, next()는 반환이 Object이므로 형변환을 해줘야 함!!
System.out.print((board[i][j] <10 ? " " : " ") + board[i][j]);
}
System.out.println();
}
}//main
}
->
22 45 24 46 47
25 48 26 49 10
32 33 34 13 35
14 36 17 1 4
6 7 40 43 21
HashSet
의 add()
는 새로운 요소를 추가하기 전에 기존에 저장된 요소와 같은 것인지 판별하기 위해 추가하려는 요소의 equals()
와 hashCode()
를 호출하기 때문에 각각을 목적에 맞게 오버라이딩을 해야 한다!!package ch11;
import java.util.HashSet;
import java.util.Iterator;
public class Ex11_12 {
public static void main(String[] args) {
HashSet setA = new HashSet();
HashSet setB = new HashSet();
HashSet setHap = new HashSet();
HashSet setGyo = new HashSet();
HashSet setCha = new HashSet();
setA.add("1");
setA.add("2");
setA.add("3");
setA.add("4");
setA.add("5");
setB.add("4");
setB.add("5");
setB.add("6");
setB.add("7");
setB.add("8");
System.out.println("setA = "+setA);
System.out.println("setB = "+setB);
Iterator it = setA.iterator();
// 합집합
while(it.hasNext())
setHap.add(it.next());
it = setB.iterator();
while(it.hasNext())
setHap.add(it.next());
System.out.println("setHap = "+setHap);
// 교집합
it = setB.iterator();
while(it.hasNext()) {
Object tmp = it.next(); //이렇게 따로 받아서 해야한다!
//바로 contains(it.next())하면 계속 next()..해서 NoSuchElementException
if(setA.contains(tmp))
setGyo.add(tmp);
}
System.out.println("setGyo = "+setGyo);//????왜 안나오지
// 차집합, setA 기준으로 하려면 setA.iterator()
it = setA.iterator();
while(it.hasNext()) {
Object tmp = it.next();
if(!setB.contains(tmp))
setCha.add(tmp);
}
System.out.println("setCha = "+setCha);
// 메서드 활용
// setA.addAll(setB);
System.out.println("합집합 addAll() :: "+setA); //setA 변경
// setA.retainAll(setB);
System.out.println("교집합 retainAll() :: "+setA); //setA 변경(삭제)
setA.removeAll(setB);
System.out.println("차집합 removeAll() :: "+setA); //setB 변경(삭제)
}
}
->
setA = [1, 2, 3, 4, 5]
setB = [4, 5, 6, 7, 8]
setHap = [1, 2, 3, 4, 5, 6, 7, 8]
setGyo = [4, 5]
setCha = [1, 2, 3]
합집합 addAll() :: [1, 2, 3, 4, 5, 6, 7, 8]
교집합 retainAll() :: [4, 5]
차집합 removeAll() :: [1, 2, 3]