알버트의 개발하는 블로그

자바 제18강 : 자바 HashSet, TreeSet 클래스 이용하여 데이터 처리하기 본문

프로그래밍 언어/Java

자바 제18강 : 자바 HashSet, TreeSet 클래스 이용하여 데이터 처리하기

알버트 2021. 9. 10. 10:23

 

이번 시간에는 자바에서 제공하는 유용한 클래스인 HashSet과 TreeSet 클래스에 대해서 익혀보겠습니다.

HashSet과 TreeSet은 ArrayList처럼 원하는 데이터를 저장할 수 있는 클래스입니다. 하지만 이 둘은 ArrayList와는 다르게 중복된 데이터를 허용하지 않는다는 점에서 공통점을 갖고 있습니다. 그래서 데이터를 저장해야 하는데 중복된 데이터는 필요없을 때 유용하게 쓰입니다.

먼저 HashSet부터 예제를 통해서 알아보겠습니다.

 


HashSet 클래스 예제

package kr.koreait.collectionTest;

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

public class HashSetTest {

	public static void main(String[] args) {
		
//		HashSet은 중복되는 데이터 입력을 허용하지 않는다.
//		데이터 입력순서와 저장순서가 달라서 get(), set() 메소드를 제공하지 않는다.
		HashSet<Integer> hset = new HashSet<Integer>();
		
		hset.add(500);	//add()는 데이터를 넣는다.
		System.out.println(hset.size() + " : " + hset);
		hset.add(100);
		System.out.println(hset.size() + " : " + hset);
		hset.add(50);	//데이터 입력순서와 저장순서가 다르다는 것을 알 수 있다.
		System.out.println(hset.size() + " : " + hset);
		hset.add(100);	//중복되는 데이터는 입력되지 않는다.
		System.out.println(hset.size() + " : " + hset);
		
		System.out.println("==============================================");
		
		hset.remove(500);	//500이라는 데이터를 지운다.
		System.out.println(hset.size() + " : " + hset);
		hset.clear();	//clear은 모든 데이터를 지운다.
		System.out.println(hset.size() + " : " + hset);
		}
}

 

 

먼저 HashSet 클래스 예제입니다. ArrayList와 동일한 메소드들을 제공하지만 데이터 입력순서와 저장순서가 다르기 때문에 get()과 set()메소드는 제공되지 않습니다. 원래대로라면 데이터가 저장된 순서대로 500, 100, 50, 100 이렇게 출력되야 합니다. 하지만 실제로 출력해보면 저장 순서가 입력순서와 다르다는 것을 알 수 있습니다. 또한 중복된 값 100은 저장되지 않습니다.

한번 실행해보겠습니다.

 

이와 같은 값이 나온것을 알 수 있습니다. 3번째줄과 4번째줄을 통해서, 저장순서가 다르다는 것과 중복된 값은 저장되지 않는다는 것을 알 수 있습니다.

 

 

 


 

TreeSet 클래스 예제

그 다음으로 TreeSet 클래스입니다. TreeSet클래스는 HashSet과 동일하게 중복된 데이터를 허용하지 않습니다. 그리고 또 추가되는 기능이 바로 오름차순 정렬입니다. 데이터를 저장할 때 저장 순서는 무조건 오름차순 정렬로 저장하게 됩니다. 바로 예제를 통해서 알아보겠습니다.

 

package kr.koreait.collectionTest;

import java.util.TreeSet;

public class HashSetTest {

	public static void main(String[] args) {
		
//		TreeSet은 중복되는 데이터 입력을 허용하지 않고 저장순서가 무조건 오름차순이다.
//		TreeSet과 동일하게 get(), set() 메소드를 제공하지 않는다.
		TreeSet<Integer> hset = new TreeSet<Integer>();
		
		hset.add(500);	//add()는 데이터를 넣는다.
		System.out.println(hset.size() + " : " + hset);
		hset.add(100);
		System.out.println(hset.size() + " : " + hset);
		hset.add(50);	
		System.out.println(hset.size() + " : " + hset);
		hset.add(100);	//중복되는 데이터는 입력되지 않는다.
		System.out.println(hset.size() + " : " + hset);
		
		System.out.println("==============================================");
		
		hset.remove(500);	//500이라는 데이터를 지운다.
		System.out.println(hset.size() + " : " + hset);
		hset.clear();	//clear은 모든 데이터를 지운다.
		System.out.println(hset.size() + " : " + hset);
		}
}

 

이렇게 코딩해주었습니다. 위의 HashSet 클래스랑 거의 똑같습니다. HashSet클래스 대신 TreeSet클래스를 넣어주었고 객체 이름은 hset에서 tset으로 바꿔주었습니다. 바로 실행해보겠습니다.

 

 

 

이처럼 입력된 값이 자동으로 오름차순으로 정렬되는 것을 알 수 있으며, 중복된 값은 저장되지 않는다는 것을 알 수 있습니다.

 

 

HashSet과 TreeSet은 이처럼 중복된 데이터를 허용하지 않기 때문에 데이터를 처리함에 있어서 굉장히 유용한 클래스입니다. 읽어주셔서 감사합니다.