본문 바로가기
개발/Java

Set - TreeSet 사용하는 방법

by Devsong26 2017. 11. 2.

- TreeSet이란? 

Set 인터페이스를 구현한 클래스로써 기본적으로 nature ordering를 지원하며 생성자의 매개변수로 Comparator객체를 입력하여 정렬 방법을 임의로 지정해 줄 수 있습니다. 

 

 

- 특징

Set 인터페이스를 구현한 클래스들의 경우 데이터를 꺼내기 위해서는 Iterator(반복자)클래스를 사용해야 합니다. 

Set 객체명.iterator() 메소드를 통해 Iterator 객체를 얻을 수 있습니다. 

 

 

- 생성자

4개의 생성자가 있습니다. 

 

//첫번째 생성자

TreeSet<Integer> t1 = new TreeSet<Integer>();
//두번째 생성자
TreeSet<Integer> t2 = new TreeSet<Integer>(t1);

 

첫번째 생성자는 nature ordering을 사용하는 빈 TreeSet객체를 생성합니다. 

 

두번째 생성자는 Collection 인터페이스를 구현한 클래스의 객체를 매개변수로 입력하여 TreeSet객체를 생성하는데

이 때는 generic이 일치하여야 합니다. 또한 입력되는 객체가 정렬이 되지 않은 상황일지라도 nature ordering에 의해 정렬됩니다. 

 

TreeSet<Integer> t3 = new TreeSet<Integer>(new Comparator<Integer>(){

	@Override
	public int compare(Integer o1, Integer o2){
		return o2-o1;
	}
});

t3.add(3);
t3.add(1);
t3.add(-1);
t3.add(2);

System.out.println(t3);

 

 

세번째 생성자의 경우 Comparator 객체를 매개변수로 입력하여 정렬 순서를 임의로 지정 후 객체를 생성합니다.

위의 코드는 내림차순 정렬로 바꾼 것이고 t3에 데이터를 [3,1,-1,2] 순으로 입력했을 때 내림차순 정렬되는 것을 확인할 수 있습니다.

 

TreeSet<generic> t4 = new TreeSet<generic>(SortedSet<E> s);

 

네번째 생성자는 SortedSet<E> 인터페이스를 구현한 클래스의 객체를 매개변수로 입력하여 객체를 생성하는 것으로,

ConcurrentSkipListSet과 TreeSet의 객체를 매개변수로 입력합니다. 이 때 입력되는 객체의 정렬방식과 입력된 데이터를 

생성되는 TreeSet객체에게 모두 할당됩니다. 

 

 

- 메소드

모든 메소드를 설명하지 않습니다.

 

(1) add()

add() 메소드는 generic으로 지정한(저는 Integer로 지정했습니다.) 타입의 객체를 매개변수로 입력하여 TreeSet객체에 추가하는 것입니다.

addAll() 메소드는 동일한 generic타입의 Collection인터페이스를 구현한 클래스의 객체를 매개변수로 입력합니다.

이 때, 입력되는 매개변수 객체의 모든 데이터가 TreeSet객체에 저장이 되며 지정된 정렬방식으로 정렬을 합니다. 

(위의 코드의 t3은 세번째 생성자에서 사용된 코드입니다.)

 

(2) ceiling()

ceiling() 매개변수에 입력되는 값보다 크거나 같은 원소중의 최소값(같을 경우 입력된 값을 반환)을 반환해주는 메소드입니다. 

입력되는 원소가 TreeSet 객체에 존재하지 않는다면 null를 반환합니다. 

 

(3) clear()

TreeSet 객체에 저장된 모든 데이터를 지웁니다. 

 

(4) contains(Object o)

입력되는 o가 TreeSet객체에 존재하면 true, 없으면 false를 반환합니다. 

 

(5) descendingIterator()

nature ordering의 경우 내림차순으로 TreeSet객체에 접근하는 Iterator를 반환합니다.

객체 생성시 Comparator에 의해 내림차순 정렬로 지정을  하신 경우 오름차순으로 TreeSet객체에 접근하는 Iterator를 반환합니다. 

 

(6) first()

TreeSet에 저장된 맨 처음 값을 반환합니다. 

nature ordering의 경우 가장 작은 값을 반환합니다.

데이터가 없을 경우 NoSuchElementException 예외가 발생합니다.

 

(7) floor(E e)

매개변수로 입력된 객체보다 값이 작거나 같은 원소중의 가장 큰 값을 반환합니다. 

없을 경우 null을 반환합니다. 

 

(8) higher(E e)

매개변수로 입력된 객체보다 큰 데이터 중 최소값을 반환합니다. (같은 데이터를 반환하지 않습니다.)

없을 경우 null을 반환합니다. 

 

(9) isEmpty()

TreeSet객체가 비어있는지 체크합니다. 비어있으면 true, 아니면 false를 반환합니다. 

 

(10) last()

저장된 데이터 중 맨 마지막 값을 반환합니다. 

first()와 마찬가지로 데이터가 없을 경우 NoSuchElementException 예외가 발생합니다.

 

(11) lower(E e)

매개변수로 입력된 객체보다 작은 데이터 중에 가장 큰값을 반환합니다. 

없을 경우 null을 반환합니다. 

 

(12) pollFirst()

TreeSet객체에 저장된 첫번째 값을 반환하고 TreeSet객체에서 그 값을 지웁니다. 

첫번째 데이터가 없을 경우 null을 반환합니다. 

 

(13) pollLast()

TreeSet객체에 저장된 마지막 값을 반환하고 TreeSet객체에서 그 값을 지웁니다. 

마지막 데이터가 없을 경우 null을 반환합니다. 

 

(14) remove(object o)

TreeSet 객체에 o가 저장이 되어있다면 그 값을 삭제하고 true를 반환하고, 없을 경우 false를 반환합니다. 

 

(15) size()

TreeSet 객체에 저장된 원소들의 개수를 반환합니다. 

 

 

이상으로 Set - TreeSet 설명을 마칩니다. 

 

 


더 많은 내용을 보시려면 아래를 참고하세요.


블로그의 다른 글

 

Map - HashMap 사용하는 방법

- HashMap이란? Map 인터페이스를 구현한 Hash table입니다. HashMap 객체에는 (key, value)쌍으로 데이터를 입력할 수 있습니다. * (key, value)쌍을 entry라고 부릅니다. - 특징 1. key, value값으로 null을 허..

developer-syubrofo.tistory.com

 

Map - TreeMap 사용하는 방법

- TreeMap이란? NavigableMap 인터페이스를 구현한 Red-Black tree입니다. key값에 의해 정렬이 되는데, 생성자에 Comparator객체를 입력하여 생성할 경우 Comparator의 compare메소드에 의해 정렬이 이루어집니다..

developer-syubrofo.tistory.com

 

Map - LinkedHashMap 사용하는 방법

- LinkedHashMap이란? Map 인터페이스를 구현한 클래스이며 동시에 Linked LIst이면서 Hash table입니다. - 특징 (1) 입력했던 순서대로 Entry가 LinkedHashMap에 mapping됩니다. (2) LinkedHashMap은 double-link..

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (1) - 프로젝트 생성하기

maven 외부 저장소에서 라이브러리를 프로젝트에 포함시킬 때 간혹 문제가 발생하는 경우가 있어서 maven이 없는 스프링 프로젝트를 만들어 보겠습니다. - Dynamic Web Project 생성하기 프로젝트 이름

developer-syubrofo.tistory.com