프로그래밍 언어/JAVA

[JAVA] 자바 컬렉션 프레임워크 - Set 편

Rateye 2021. 1. 19. 15:36
728x90
반응형

Set 인터페이스 계열

  • 저장 순서를 유지하지 않고, 데이터 중복을 허용하지 않는 구조

    하나의 주머니에 무작위로 저장하는 구조와 동일함

  • 대표적인 구현체 클래스 : HashSet, TreeSet

package collection_framework;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Ex_Set {

	public static void main(String[] args) {
		
		Set set = new HashSet();
		
		System.out.println("Set 객체가 비어있는가? " + set.isEmpty());
		System.out.println("Set 객체에 저장된 요소 갯수 : " + set.size());
		
		// add(Object o) : 모든 타입의 데이터 추가
		set.add(1);
		set.add("TWO");
		set.add(3.14);

		System.out.println("Set 객체가 비어있는가? " + set.isEmpty());
		System.out.println("Set 객체에 저장된 요소 갯수 : " + set.size());
		
		// toString() 메서드가 오버라이딩 되어 있으므로 요소 출력 가능
		System.out.println("Set 객체에 저장된 모든 요소 : " + set.toString());
		System.out.println("Set 객체에 저장된 모든 요소 : " + set);
		
		System.out.println("정수 1 추가 가능한가? " + set.add(1));
		System.out.println("정수 4 추가 가능한가? " + set.add(4));
		System.out.println("Set 객체에 저장된 모든 요소 : " + set);
		
		set.add('5');
		set.add("육");
		System.out.println("Set 객체에 저장된 모든 요소 : " + set);
		
		// contains(Object o) : 해당 요소 존재 여부 리턴
		System.out.println("문자열 TWO 가 포함되어 있는가? " + set.contains("TWO"));
		System.out.println("문자열 5 가 포함되어 있는가? " + set.contains("5"));
		
		// remove(Object o) : 해당 요소 제거
		System.out.println("문자열 육 제거 결과 : " + set.remove("육"));
		System.out.println("Set 객체에 저장된 모든 요소 : " + set);
		
		// Object[] toArray() : 컬렉션 객체를 배열로 변환
		Object[] arr = set.toArray();
		System.out.println(Arrays.toString(arr)); // 배열 내용 출력
		
		// clear() : 컬렉션 객체 초기화(모든 요소 제거)
		set.clear();
		System.out.println("Set 객체가 비어있는가? " + set.isEmpty());
		System.out.println("Set 객체에 저장된 요소 갯수 : " + set.size());
		System.out.println("Set 객체에 저장된 모든 요소 : " + set);
		
		// 컬렉션 객체의 데이터를 꺼내는 공통 방법
		// 1. 향상된 for문 사용
//		for(Object o : set) {
//			// 저장되는 데이터타입이 Object 타입이므로
//			// 다양한 데이터를 모두 저장할 수 있도록 Object 타입 변수에 저장
//			System.out.println("저장된 요소 : " + o);
//		}
		
		// 2. Iterator(반복자) 객체 사용
		// Set 객체의 iterator() 메서드를 호출하여 Iterator 객체 리턴받음
//		Iterator ite = set.iterator();
//		
//		// while문을 사용하여 저장된 요소가 존재할 동안 반복
//		while(ite.hasNext()) { // 다음 요소 존재 여부 판별
//			Object o = ite.next(); // 다음 요소 꺼내기
//			System.out.println("저장된 요소 : " + o);
//		}
		
		System.out.println("====================================");
		
		Set set2 = new HashSet();
//		set2.add("1번");
//		set2.add("222번");
//		set2.add("34번");
//		set2.add("4번");
//		set2.add("595번");
//		set2.add("6번");
		set2.add(1);
		set2.add(222);
		set2.add(34);
		set2.add(4);
		set2.add(595);
		set2.add(6);
		
		System.out.println(set2);
		
		// Set 계열 구현체 클래스 중 정렬 기능을 제공하는 클래스 : TreeSet
		// => 주의! 동일한 데이터타입만 저장 가능(정렬을 위해서)
		Set treeSet = new TreeSet(set2);
		// => 컬렉션 객체 생성 시 다른 컬렉션 객체를 전달하여 초기화 가능
		System.out.println(treeSet);
		
		Set set3 = new TreeSet();
		set3.add(10);
		set3.add(20);
		System.out.println(set3);
		
		// addAll() : 기존 컬렉션 객체에 다른 컬렉션 요소를 한 번에 추가
		set3.addAll(treeSet);
		System.out.println(set3);
		
		Set set4 = new HashSet(set3);
		System.out.println(set4);
		// equals() : 두 컬렉션 객체의 요소가 같은지 판별
		System.out.println("set3 와 set4 는 같은가? " + set3.equals(set4));
	}

}
package collection_framework;

import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Test_Set {

	public static void main(String[] args) {
		/*
		 * Set 객체를 활용한 로또 번호 생성기
		 * - 중복되지 않는 1 ~ 45 범위의 난수 6개를 저장
		 * - 저장되는 난수는 오름차순 정렬 
		 */
		
		Random r = new Random();
		
		for(int i = 1; i <= 10; i++) {
			Set myLotto = new TreeSet();
			
			// 저장되는 요소(난수) 갯수가 6개보다 작을 동안 반복
			while(myLotto.size() < 6) {
				// 1 ~ 45 사이 난수 1개를 생성하여 myLotto 에 추가
				myLotto.add(r.nextInt(45) + 1);
			}
			
			System.out.println("나의 로또 번호 : " + myLotto);
			
			// ================================================
			// 1등 당첨번호(1, 11, 21, 31, 41, 42)와 비교하여 
			// 일치하는 번호 갯수 출력
			Set thisWeekLotto = new TreeSet();
			thisWeekLotto.add(1);
			thisWeekLotto.add(11);
			thisWeekLotto.add(21);
			thisWeekLotto.add(31);
			thisWeekLotto.add(41);
			thisWeekLotto.add(42);
			
			int count = 0; // 일치하는 번호 갯수를 저장하는 변수 선언
			
			for(Object o : myLotto) {
				// 하나의 요소가 다른 컬렉션 내에 존재하는지 판별 
				if(thisWeekLotto.contains(o)) {
					count++; // 카운트 증가
				}
			}
			
			System.out.println("1등 당첨 번호 : " + thisWeekLotto);
			System.out.println("일치하는 번호 갯수 : " + count + "개");
			System.out.println("------------------------------------");
			
		}
		
		
		
		
	}

}
728x90
반응형