JAVA/수업

T05 HashSet

lavender1122 2024. 1. 23. 09:28

T05

package kr.or.ddit.basic;

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

import javax.print.attribute.HashAttributeSet;

public class T05HashSetTest {
	public static void main(String[] args) {
		Set hs1 = new HashSet();
		
		//Set에 데이터 추가할때도 add() 상요
		hs1.add("DD");
		hs1.add("AA");
		hs1.add(2);
		hs1.add("CC");
		hs1.add("B");
		hs1.add(1);
		hs1.add(3);
		
		System.out.println("Set 데이터 : "+ hs1);
		
		//Set 고유한 데이터 담고 있음 index 없어도 됨
		//Set은 데이터 중복하용하지 않는다. 그래서 이미 존재하는 데이터를 또다시 추가하면
		//false 반환하고, 데이터는 추가되지 않은다.
		//내부적으로 중복 ck 하고 있음
		boolean isAdded = hs1.add("FF");
		System.out.println("중복 되지 않을 때 :" + isAdded);
		System.out.println("Set 데이터 : "+ hs1);
		System.out.println();
		
		//Set의 데이터 수정하려면 수정하는 메서드가 따로 존재하지 않기 때문에
		// 해당 데이터 삭제 후 새로운 데이터를 추가해 주면 된다.
		
		//데이터 삭제
		//1) clear() => 모든 데이터 삭제
		//2) remove(삭제할 데이터) => 해당 데이터 삭제
		
		//'FF'를 'EE' 로 수정하기
		hs1.remove("FF"); 
		System.out.println("FF 삭제 후 Set 데이터 : " + hs1);
		System.out.println();
		
		//수정인 set 이 없기 때문에 기존 데이터를 지우고 데이터 추가해야한다.
		hs1.add("EE");
		System.out.println("EE 추가 후 Set 데이터 : " + hs1);
		System.out.println();
		
		
//		hs1.clear();//전체 데이터 삭제
//		System.out.println("clear() 후 Set 데이터 : " + hs1);
		
		System.out.println("Set의 데이터 개수 :" + hs1.size());
		System.out.println();
		
		//Set은 인덱스 개념이 존재하기 않기 때문에 List 처럼 인덱스로 데이터를 하나씩 불러올 수 없다.
		// 그래서 데이터를 접근하기 위해서 Iterator 객체 사용
		
		//반복자 Iterator
		//Set 타입에는 get이 없기 때문에 iterator 사용해서 출력 가능한다.
		Iterator it = hs1.iterator();
		
		//데이터 개수 만틈 반복하기
		while (it.hasNext()) {//다음 데이터가 있는지 확인
			System.out.println(it.next()); //다음 데이터 가져오기
		}
		
		//1~100 사이의 중복되지 않는 정수 5개 만들기 
		//Set타입 객체 생성 int 타입만 사용할거라서 Integer 제너릭 사용
		Set<Integer> intRnd = new HashSet<Integer>();
		
		//random 값 중복이 될수 있다 중복이되면 5개 이하로 추출 될 수 있다.
		while (intRnd.size() < 5) {
			int num = (int) (Math.random() * 100 +1);
			intRnd.add(num);
		}
		System.out.println("생성된 난수들 : " + intRnd);
		
		//Collection 유형의 객체들은 서로 다른 자료 구조로 쉽게 변경해서 사용할 수 이싿.
		// 다른 유형의 객체를 생성할 때 생성자에 해당 데이터를 넣어주면 된다.
		List<Integer> intRndList = new ArrayList<Integer>(intRnd);
		System.out.println("intRndList 데이터 출력:");
		for (Integer num : intRndList) {
			System.out.print(num + " ");
			
		}
		System.out.println();
	}

}