평범한 연구소

[JAVA] Set - HashSet, LinkedHastSet, TreeSet 본문

JAVA/기본 개념

[JAVA] Set - HashSet, LinkedHastSet, TreeSet

soyeonisgood 2022. 8. 6. 22:16

java.util.Set<E>

  • 순서 유지X 데이터 집합
  • 중복 X
  • 하나의 null만 저장 가능
  • 주요 구현 클래스: HashSet, LinkedHashSet, TreeSet

 

java.util.HashSet<E>

  • 해시테이블에 의해 지원되는 Set  인터페이스 구현한 클래스
  • 저장 순서 유지 X
  • 중복 X
  • 하나의 null만 저장 가능
  • 멀티스레드 환경에서 동기화 X

 

java.util.LinkedHashSet<E>

  • HashSet 하위 클래스
  • 해시테이블과 linked list 구현한 Set
  • 삽입 순서대로 저장
  • 중복 X
  • 멀티스레드 환경에서 동기화 X

 

java.util.TreeSet<E>

  • SortedSet 인터페이스 구현한 클래스
  • 정렬된 순서에 의해 반복
  • 중복 X
  • 멀티스레드 환경에서 동기화 X
  • Comparable 인터페이스의 compareTo() 메소드나, Comparator 인터페이스의 compare() 메소드 사용해 모든 요소 비교. 따라서 TreeSet 요소는 Comparable 또는 Comparator 구현한 객체를 생성자에 인자로 넘겨 두 객체의 비교 방법 제공해야함. 그렇지 않으면 ClassCastException 런타임 오류.

 

Set 주요 메소드 예제

  • set.add(): 요소 추가
  • set.size(): 요소의 개수
  • set.contains: 객체 존재 여부
  • set.isEmpty(): 비어있는지 여부
  • set.toArray(): 요소를 객체 배열로 리턴
  • set.clear(): 전체 삭제
  • set.remove(): 지정한 요소만 삭제
public static void main(String[] args) {
	Set<String> set = new HashSet<>();
	set.add("서울");
	set.add("부산");
	set.add("대구");
	set.add("광주");
	set.add("인천");
	set.add("대전");
	set.add("서울"); // 기존 서울을 덮는다.
		
	System.out.println(set); // 등록 순서로 출력 되지 않는다.
		
	for(String s : set) {
		System.out.print(s+" ");
	}
	System.out.println();
		

}

 

 

TreeSet<> 예제

public class Ex04 {

	public static void main(String[] args) {
		// Set을 이용하여 로또 프로그램 작성
		
		Set<Integer> set = lotto();
		
		for(Integer n : set) {
			System.out.print(n+" ");
		}
		System.out.println();
	
	}
	
	// 1~45사이의 수 6개 추출
	public static Set<Integer> lotto() {
		Set<Integer> set = new TreeSet<>();
		Random rd = new Random();
		
		while(set.size()<6) {
			// set.add((int)((Math.random()*45)+1));
			set.add(rd.nextInt(45)+1);
		}
		
		return set;
	}

}