자바

자바 컬렉션 Java 컬렉션 - 이진트리구조, TreeSet

알통몬_ 2017. 3. 25. 19:34
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


검색 기능을 강화시킨 컬렉션에 대해 공북하겠습니다.


1. 이진트리구조

 : 여러 개의 노드로 연결된 트리 형태로 연결된 구조이다.

루트 노드라 불리는 하나의 노드에서부터 시작해 최대 2개의 노드를

연결할 수 있는 구조


상 하로 연결된 두 노드를 부모 <-> 자식 관곙 있다고 하면

위를 부모, 아래를 자식이라 합니다.

부모 노드 값보다 작은 값은 왼쪾 자식 노드에, 크면 오른쪾 자식 노드에 위치시킵니다.


ex) 첫번 째로 저장되는 값이 루트 노드가 되고, 두번 째 값은 루트 노드부터

시작해서 값의 크기를 비교하며 트리를 따라 내려갑니다.

숫자가 아닌 문자를 저장할 시 문자의 유니코드 값으로 크기를 비교합니다.

이런 식으로 트리를 구성하면 마지막 왼쪽 노드는 가장 작은 값이,

마지막 오른쪽 노드는 가장 큰 값이 됩니다.




2. TreeSet

==> 이진 트리를 기반으로 한 Set 컬렉션

하나의 노드는 노드 값인 Value 와 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의

변수로 구성됩니다.

TreeSet에 객체를 저장하면 자동으로 정렬이 됩니다.

부모 값과 비교해 낮은 것은 왼쪽 자식 노드에, 큰 것은 오른쪽 자식 노드에 저장됩니다.


TreeSet을 생성하려면 저장할 객체의 타입을 파라미터로 표기하고

기본 생성자를 호출하면 됩니다.

TreeSet<E> set = new TreeSet<E>();


Set 인터페이스 타입 변수에 대입해도 되지만 TreeSet 클래스 타입으로 대입한 이유는?

객체를 찾거나 범위 검색과 관련된 메소드들을 사용하기 위함입니다.

예제)



아래 표는 TreeSet이 가진 정렬관련 메소드들 입니다.

NavigableSet은 TreeSet처럼 first(), last(), lower(), higher(), floor(), ceiling()를 제공하고, 

정렬 순서를 바꾸는 descendingSet() 메서드도 제공합니다. 

오름차순으로 정렬하고 싶을 때에는 아래처럼 descendingSet()을 두 번 호출하면 됩니다.

NavigableSet<E> descendingSet = treeSet.descendingSet();

NavigableSet<E> ascendingSet = descendingSet.descendingSet();


TreeSet이 가지는 범위 관련 검색 메소드들

예제)






반응형