본문 바로가기
JAVA

[JAVA] Set

by KhyeonS 2022. 8. 2.

Set에 대해 알아보자.


Set은 java.util 패키지에 존재하는 인터페이스로써 특정 코드에서 중복된 값의 허용이 있어서는 안 될 때 사용한다. 즉, Set을 사용하면 복잡한 코드구성 없이 중복된 요소들을 쉽게 제거할 수 있다는 장점이 있다.

여기서는 가장 많이 사용되는 HashSet(정렬이 안되고)과 TreeSet(오름차순 정렬 됨)을 알아본다.

 

set은 중복된 값을 허용하지 않을 때 사용되는데 정렬을 하지 않는 HashSet와 오름차순정렬을 해주는 TreeSet두가지가 잇다.

Set 구조는 arrayList와 같이 get() 메서드를 이용하여 특정 인덱스(요소)로 접근할 수 없기 때문에 내용을 순차적으로 얻어오기 위해서는 iterator라고 하는 반복자를 이용해야 한다. Iterator에서 하나의 객체를 가져올 때는 next()메소드를 사용하고, hasNext() 메소드는 가죠올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.

 

package ex1_collection_set;

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

public class Ex1_Set {
    public static void main(String[] args) {
    	//컬렉션 프레임워크: 배열은 여러개의 데이터를 한번에 저장 할 수 있다는 장점이 있지만
    	//index의 갯수가 정해져 있기 때문에 동적인 상황에 대한 대처가 불가능하다.
    	//배열의 이러한 불편한 부분을 해소하기 위해 데이터들을 index와 상관없이 효율적으로 관리하기 위항
    	//이류로 만들어진 클래스들을 컬렉션이라고 한다.
    	//대표적으로 Set, Map, List가 있다.
    	
    	//HashSet, TreeSet이 가장 많이 사용된다. 이 클래스들은 Set인터페이스를 구현하고 있다.
    	//Set클래스들은 중복된 값을 알아서 제거한다.
    	HashSet<String> hs = new HashSet<>();
    	hs.add("홍길동");
    	hs.add("남도일");
    	hs.add("코난");
    	hs.add("김길동");
    	hs.add("kim");
    	hs.add("김길동");//같은 값은 add를 해도 추가 되지 않는다.
    	hs.remove("김길동");//김길동이 포함되어 있는 방을 삭제
    	
    	//hs 객체를 출력하면 저장된 모든 데이터를 한번에 확인할 수 있다.
    	System.out.println( hs );

    	System.out.println("--------------------");
    	
    	//TreeSet은 오름차순 정렬기능 포함하고 있다.
    	TreeSet<String> ts = new TreeSet<>();
    	ts.add("홍길동");
    	ts.add("남도일");
    	ts.add("코난");
    	ts.add("김길동");
    	ts.add("kim");
    	ts.add("김길동");
    	
    	System.out.println( ts );
    	
   }
}

 

import java.util.HashSet;
import java.util.Random;
import java.util.TreeSet;

public class Ex2_Set {
	public static void main(String[] args) {
		
		//<제너릭 타입>은 기본자료형이 아닌 클래스 구조만 추가할 수 있다.
		HashSet<Integer> hs = new HashSet<>();

		while (true) {
			
			//1 ~ 45사이의 난수
			int rnd = new Random().nextInt(45) + 1;
			
			hs.add(rnd);
			
			//he에 추가된 방의 갯수 : size()
			if (hs.size()==6) {
				break;//while탈출
			}
		}//while
		
		System.out.println( hs );
		
		System.out.println("------------------");
		
		TreeSet<Integer> ts = new TreeSet<>();

		while (true) {
			
			//1 ~ 45사이의 난수
			int rnd = new Random().nextInt(45) + 1;
			
			ts.add(rnd);
			
			//he에 추가된 방의 갯수 : size()
			if (ts.size()==6) {
				break;//while탈출
			}
		}//while
		
		System.out.println( ts );
		
		//wrapper 클래스의 종류
		//int -> Integer
		//char -> Character
		//byte -> Byte
		//boolean -> Boolean
		//short -> Short
		//long -> Long
		//float -> Float
		//double -> Double
		
	}//main
}

 

public class Test07 {

	public static void main(String[] args) {
		HashSet<Integer> hs = new HashSet<>(); //Wrapper 구문
		while (true) {
			int v =(int)(Math.random() * 45+1);
//			int v = new Random().nextInt((("큰_수" - "작은_수")+1)+"작은_수");
//			int v = new Random().nextInt(45)+1;
			hs.add(v);
			if(hs.size()>=6)
				break;
		}
		System.out.println("정렬이 안되는 HashSet :"+hs); // Here before HashSet example
		
		TreeSet<Integer> ts = new TreeSet<>();
		while (true) {
			int v =(int)(Math.random() * 45+1);
//			int v = new Random().nextInt((("큰_수" - "작은_수")+1)+"작은_수");
//			int v = new Random().nextInt(45)+1;
			ts.add(v);
			if(ts.size()>=6)
				break;
		}
		System.out.println("오름차순 정렬이 되는 TreeSat :"+ts);  // here before TreeSet example
		System.out.println(ts.subSet(10, 30)); // 위 결과에서 10보다 크고 30보다 작은수
	}

}

'JAVA' 카테고리의 다른 글

[JAVA] ArrayList  (0) 2022.08.03
[JAVA] MAP  (0) 2022.08.03
[JAVA] wait()과 notify()  (0) 2022.08.02
[JAVA] getter와 setter  (0) 2022.08.02
[JAVA] Thread  (0) 2022.08.01

댓글