고급자바

Set 인터페이스-22.03.25

AIN99 2022. 3. 25. 12:29
728x90
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 T05_SetTest {

	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("BB");
		hs1.add(1);
		hs1.add(3);
		
		System.out.println("Set 데이터:"+hs1);
		System.out.println();
		
		//Set은 데이터의 순서(인덱스)가 없고, 중복을 허용하지 않는다.
		//그래서 이미 있는 데이터를 add하면  false를 반환하고, 데이터는 추가되지 않는다.
		
		boolean isAdded=hs1.add("FF");
		System.out.println("중복되지 않을 때: "+isAdded);
		System.out.println("Set 데이터: "+hs1);
		System.out.println();
		
		isAdded=hs1.add("CC");
		System.out.println("중복될 때: "+isAdded);
		System.out.println("Set 데이터: "+hs1);
		System.out.println();
		
		//Set의 데이터를 수정하려면 수정하는 명령이 따로 없기 떄문에 해당 자료를 삭제한후 새로운
		//데이터를 추가해 주어야 한다.
		
		//삭제하는 메서드
		//1) Clear() =>Set 데이터 전체 삭제
		//2)remove(삭제할 자료) =>해당 자료 삭제
		
		//예) 'FF'를 'EE'로 수정하기
		hs1.remove("FF");
		System.out.println("삭제 후 Set 데이터: "+hs1);
		System.out.println();
		
		hs1.add("EE"); //EE자료 추가
		System.out.println("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를 이용해야 한다.=> Set객체의 iterator() 메서드를 호출하면 된다.
		Iterator it=hs1.iterator();
		
		//데이터 개수만큼 반복하기
		//hasNext() =>포인터 다음 위치에 데이터가 있으면 true, 없으면 false를 반환한다.
		
		while(it.hasNext()) { //다음자료가 있는지 검사... next() =>포인터를 다음 자료 위치로 이동하고, 이동한 위치의 자료를 반환한다.
			
			System.out.println(it.next());
			
		}
		//1~100사이의 중복되지 않는 정수 5개 만들기
		Set<Integer> intRnd=new HashSet<Integer>();
		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("List의 자료출력...");
		
		for(int i=0; i<intRndList.size();i++) {
			System.out.println(intRndList.get(i));
		}
	}

}

<Set은 Iterator말고 향상된 for문으로도 출력이 가능하다.>

for(Object list1:hs1) {
			System.out.print(list1+" ");
		}

 


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

public class T06_SetTest {
	/**
	 * TreeSet 예제
	 * @param args
	 */

	public static void main(String[] args) {
		//TreeSet은 자동 정렬 기능이 들어가 있다. 검색 속도 빠르다~
		TreeSet<String> ts =new TreeSet<String>();
		
		List<String> abcList=new ArrayList<String>();
		
		//영어 대문자를 문자열로 변환하여 List에 저장
		for(char ch='A'; ch<='Z'; ch++) {
			String temp=String.valueOf(ch);
			abcList.add(temp);
		}
		Collections.shuffle(abcList);
		
		System.out.println("abcList자료: "+abcList);
		
		for(String str:abcList) {
			ts.add(str);
		}
		System.out.println("TreeSet 자료:"+ts);
		
		/*
		 * TreeSet에 저장된 자료 중 특정한 자료보다 작은 자료를 찾아서 SortedSet으로 반환하는 메서드가 있다.
		 * =>headSet(기준값) => 기본적으로 '기준값'은 포함시키지 않는다. 즉 머리를 기준으로 작은것
		 * =>headSet(기준값,논리값) => 논리값이 true이면, '기준값' 포함함.
		 */
		
		SortedSet<String> ss1=ts.headSet("K");
		System.out.println("K 이전자료: "+ss1);  //기준값 미포함
		System.out.println("K 이전자료(기준값 포함): "+ts.headSet("K",true));
		
		/* '기준값' 보다 큰 자료를 찾아 SortedSet으로 반환하는 메서드
		 * tailSet(기준값) => 기본적으로 '기준값'을 포함시킨다.
		 * tailSet(기준값, 논리값) => 논리값이 false이면 '기준값' 미포함.*/
		
		SortedSet<String> ss2= ts.tailSet("K");
		System.out.println("K 이후자료: "+ss2);  //기준값 포함
		System.out.println("K 이후자료(기준값 미포함): "+ts.tailSet("K",false));
		
		/* subSet(기준값1,기준값2) => 기준값1 ~ 기준값2 사이의 값을 가져옴.
		 *                        ('기준값1' 포함, '기준값2' 미포함)
		 * subSet(기준값1, 논리값1, 기준값2, 논리값2)
		 * => 각 기준값을 포함할지 여부를 설정한다.
		 * (논리값이 true이면 포함, false이면 미포함) */
		
		System.out.println("K (포함)부터 N(미포함) 까지: "
		              +ts.subSet("K", "N"));
		System.out.println("K (포함)부터 N(포함) 까지: "
	                 +ts.subSet("K",true, "N",true));
		System.out.println("K (미포함)부터 N(미포함) 까지: "
	                 +ts.subSet("K",false, "N",false));
		System.out.println("K (미포함)부터 N(포함) 까지: "
	                 +ts.subSet("K", false,"N",true));
	
	}

}

 

728x90