ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Set 인터페이스-22.03.25
    고급자바 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

    '고급자바' 카테고리의 다른 글

    Map,properties-22.03.28  (0) 2022.03.28
    hashCode(),equals()-22.03.25  (0) 2022.03.25
    Collection 객체 정렬하기-22.03.25  (0) 2022.03.25
    컬렉션 프레임워크-22.03.24  (0) 2022.03.24
    고급자바-2022.03.24  (0) 2022.03.24
Designed by Tistory.