08_HashSet

charl hi·2022년 6월 21일
0

자바의정석2

목록 보기
8/13

링크텍스트

  • Set은 ✨ 순서X 이므로 add()한 순서대로 출력된다는 보장이 없다!!
    -> ArrayList또는 LinkedList에 담기
    -> sort()

✨Bingo

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



✨set.add() 전 중복검사

  • HashSetadd()는 새로운 요소를 추가하기 전에 기존에 저장된 요소와 같은 것인지 판별하기 위해 추가하려는 요소의 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]

0개의 댓글