JAVA 기초

JAVA 15-2

Vanillwa 2023. 9. 1. 14:46

Set

 

package ex6_set;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Ex1_set {
	public static void main(String[] args) {
		//set
		//중복된 값을 허용하지 않는다
		//index가 없어 개별의 요소에 접근이 불가능
		
		Set<String> hs1 = new HashSet<>(); //HashSet 생성
		
		//HashSet 데이터 추가
		hs1.add("b");
		hs1.add("a");
		hs1.add("f");
		hs1.add("d");
		System.out.println(hs1);
		
		//Set은 중복되는 값을 추가할 수 없다
		hs1.add("a");
		hs1.add("b");
		hs1.add("c");
		System.out.println(hs1);
		
		//Set의 요소 개수
		System.out.println("hs1의 요소 개수 : "+hs1.size());
		
		//Set에 해당 요소가 있는지 검증
		System.out.println("a의 유무 : "+hs1.contains("a"));
		
		//Set 요소 제거
		hs1.remove("f");
		System.out.println(hs1);
		
		//Set 모든 요소 제거
		//hs1.removeAll(hs1);
		hs1.clear();
		System.out.println(hs1);
		
		
		//1~45사이의 난수를 생성하여 hs2에 6개 채우기
		Set<Integer> hs2 = new HashSet<>();
		Random rnd = new Random();
		int num;
		while(true) {
			num = rnd.nextInt(45)+1;
			hs2.add(num);
			if(hs2.size()==6)
				break;
		}
		System.out.println("로또 번호 : "+hs2);
		
		//Set -> 배열로 변환
		Integer arr[] = hs2.toArray(new Integer[0]); 
		//Integer[0] : 배열의 크기를 0으로 해두면 Set의 크기만큼 자동으로 잡아준다.
		for(Integer i : arr)
			System.out.printf("%d ",i);
	}
}

실행 결과


 

Red-Black Tree

package ex6_set;

import java.util.Arrays;
import java.util.TreeSet;

public class Ex2_set {
	public static void main(String[] args) {
		//이진 탐색 트리에서 성능을 향상시킨 레드-블랙 트리
		//부모노드보다 작은 값은 왼쪽, 큰 값은 오른쪽에 배치해
		//데이터의 추가나 삭제시 트리가 한쪽으로 치우치지 않도록 균형을 맞춤
		
		TreeSet<Integer> set1 = new TreeSet<>(); //TreeSet 생성
		TreeSet<Integer> set2 = new TreeSet<>(Arrays.asList(1,2,3)); //초기값을 지정한 TreeSet
		
		//요소 추가
		set1.add(7); //뿌리 노드
		set1.add(4);
		set1.add(9);
		set1.add(1);
		set1.add(5);
		System.out.println("set1 : "+set1);
		
		//요소 삭제
		set1.remove(1); //값 1 제거
		System.out.println("1 삭제 : "+set1);
		
		//크기 구하기
		System.out.println("set1 사이즈 : "+set1.size());
		
		//요소 출력
		System.out.println("최소값 : "+set1.first()); //최소값
		System.out.println("최대값 : "+set1.last()); //최대값
		System.out.println("5의 다음 요소 : "+set1.higher(5)); //인자보다 큰 데이터중 가장 작은 값, 없으면 null
		System.out.println("7의 이전 요소 : "+set1.lower(7)); //인자보다 작은 데이터중 가장 큰 값, 없으면 null
		
		//모든 요소 제거
		set1.clear();
	}
}

실행 결과


 

Iterator

 

package ex7_iterator;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class Ex1_iterator {
	public static void main(String[] args) {
		//iterator 반복자
		//컬렉션의 요소를 순회하면서 하나씩 추출하는데 사용
		//hasNext() : 다음에 순회할 데이터의 유무 확인
		//next() : 다음 위치의 데이터로 이동하여 값을 반환
		
		List<Integer> list = new ArrayList<>();
		for(int i=0;i<10;i++)
		{
			list.add(i);
		}
		
		Iterator<Integer> iter = list.iterator();//순회하려는 List의 자료형과 일치
		
		System.out.printf("list 요소 출력 : ");
		while(iter.hasNext()) {
			System.out.printf("%d ",iter.next());
		}
		
		Set<Integer> set = new HashSet<>();
		for(int i = 1;i<=10;i++) {
			set.add(i);
		}
		System.out.println();
		
		Iterator<Integer> iter2 = set.iterator();
		
		System.out.printf("set 요소 출력 : ");
		while(iter2.hasNext()) {
			System.out.printf("%d ", iter2.next());
		}
		System.out.println();
		
		List<Integer> list2 = new ArrayList<>();
		list2.add(5);
		list2.add(2);
		list2.add(4);
		list2.add(9);
		list2.add(1);
		list2.add(8);
		list2.add(3);
		list2.add(6);
		list2.add(10);
		list2.add(7);
		System.out.println(list2);
		
		Collections.sort(list2); //요소 정렬
		System.out.println(list2);
		
		Collections.shuffle(list2);
		System.out.println(list2);//요소 셔플
	}
}

실행 결과


 

예제

package ex8_work;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

public class Bingo {
	//컬렉션을 이용해 5*5 랜덤 빙고판 만들기
	//1~50사이의 난수중 25개를 뽑아 HashSet에 추가
	//ArrayList<>(set); -> set객체를 리스트로 변환
	public static void main(String[] args) {
		Random rnd = new Random(); 
		Set<Integer> bingo = new HashSet<>();
		
		while(true) {
			bingo.add(rnd.nextInt(50)+1);
			if(bingo.size()==25)
				break;
		}
		
		List<Integer> bingo2 = new ArrayList<>(bingo);
		Collections.shuffle(bingo2);
		
		for(int i=0; i<bingo2.size(); i++) {
			System.out.printf("%02d \t",bingo2.get(i));
			if((i+1)%5==0)
				System.out.printf("\n\n\n");
		}
	}
}

실행 결과


 

'JAVA 기초' 카테고리의 다른 글

JAVA 16-2  (0) 2023.09.01
JAVA 16-1  (0) 2023.09.01
JAVA 15-1  (0) 2023.09.01
JAVA 14-2  (0) 2023.08.30
JAVA 14-1  (0) 2023.08.30