자바

JAVA STEP 38. 컬렉션(HashSet)

IT의 큰손 2023. 2. 24. 17:53
728x90

★ 컬렉션

1.  List 계열

  • 순서가 있는 집합
  • 첨자(방번호)
  • 데이터 중복을 허용한다.

2. Map 계열

  • 순서가 없는 집합
  • 데이터 중복을 허용한다.

3. Set 계열

  • 순서가 없는 집합
  • 식별자가 없다. > 방과 방을 구분할 수 없다.
  • 데이터 중복을 허용하지 않는다.

 

★ HashSet

  • 기본 요소
  • 소스코드
  •  
private static void m1() {
		
		HashSet<String> set = new HashSet<String>();
		
		//1. 요소 추가하기
		set.add("사과");
		set.add("딸기");
		set.add("바나나");
		
		//2. 요소 개수
		System.out.println(set.size());
		
		//3. 덤프
		System.out.println(set);
		
		//4. 중복된 값 추가하기
		boolean result = set.add("사과"); //안들어감(기존에 사과가 있어서..)
		System.out.println(result);
		
		System.out.println(set);
		
		//5. 검색
		set.contains(set.contains("사과"));
		
		//6. 삭제
		set.remove("사과");
		System.out.println(set);
		
		//7. 요소 읽기?? > 탐색 통해서
		for(String item : set) { //for문 시작할때 이터레이터를 생성한다.
			System.out.println(item);
		}
		
		System.out.println();
		System.out.println();
		
		//위의 향상된 for문의 탐색 > 원본
		
		//이터레이터 > 데이터 집합을 탐색하는 도구 > 탐색기
		//*** 끝까지 읽고 나면 다시 읽을 수 없다.
		Iterator<String> iter = set.iterator();
		
		while(iter.hasNext()) {
			System.out.println(iter.next());
		}
		
		//이터레이터 > 다시 읽으려면 다시 선언을 해줘야함.
		iter = set.iterator();
		System.out.println(iter.next());
		
//		System.out.println(iter.hasNext());
//		System.out.println(iter.next());
//		
//		System.out.println(iter.hasNext());
//		System.out.println(iter.next());
		
	
		
		
		
//		ArrayList<String> list = new ArrayList<String>();
//		
//		list.add("사과");
//		list.add("사과");
//		list.add("사과");
		
		
	}

 

HashSet 예제 1) 로또 번호 > 중복 되지 않는 난수

  • ArrayList를 사용하였을 경우
  •  
ArrayList<Integer> lotto = new ArrayList<Integer>();
		
		for(int i =0; i<6; i++) {
			
			int n = (int)(Math.random()*45)+1;
            
            if(!lotto.contains(n)) {
				lotto.add(n);
			}else {
				i--;
			}
			
			
		}
  • Hash set을 사용하였을 경우
  •  
HashSet<Integer> lotto2 = new HashSet<Integer>();
		
		while(lotto2.size() < 6) {
			
			int n = (int)(Math.random()*45)+1;
			lotto2.add(n); //HashSet은 자율적으로 중복값 배제
			
		}
		System.out.println(lotto2);

 

HashSet 예제 2) 경품 행사 

  • 소스코드
  •  
private static void m3() {
		
		//마트 경품 행사
		//1등 : 아이패드
		//2등 : 에어팟
		//3등 : 참치세트
		//4등 : 김세트
		//5등 : 맥스봉
		
		String[] list = {"홍길동", "아무개", "하하하", "호호호", "후후후", "유재석", "강호동", "박명수", "정형돈", "조세호"};
		
		//추첨
		//1. 중복 당첨 허용(O) > ArrayList
		//2. 중복 당첨 허용(X) > HashSet
		
		for(int i=0; i<5; i++) {
			System.out.println(list[(int)(Math.random()*10)]);
		}
		System.out.println();
		
		HashSet<String> set = new HashSet<String>();
		
		while(set.size() < 5) {
			set.add(list[(int)(Math.random()*10)]);
		}
		System.out.println(set);
		
		
	}
728x90