treeset java tutorial with programming examples
이 튜토리얼은 TreeSet 클래스, 구현, 반복, TreeSet 대 HashSet, Java TreeSet 예제 등에 대한 모든 것을 설명합니다.
Java의 TreeSet은 Set 인터페이스 (보다 구체적으로 SortedSet)를 구현합니다. TreeSet은 데이터 저장을 위해 내부적으로 TreeMap을 사용합니다. 기본적으로 TreeSet의 개체 또는 요소는 자연 순서에 따라 오름차순으로 저장됩니다.
Java에서 TreeSet을 구현하는 TreeSet 클래스는 'NavigableSet'인터페이스를 구현하고 AbstractSet 클래스도 상속합니다.
=> 여기에서 Java 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.
학습 내용 :
Java의 TreeSet
TreeSet 요소는 특정 생성자 프로토 타입을 사용하여 TreeSet 개체를 만들 때 사용자 정의 된 Comparator를 제공하여 명시 적으로 정렬 할 수도 있습니다.
다음은 TreeSet의 몇 가지 중요한 특성입니다.
- TreeSet 클래스는 SortedSet 인터페이스를 구현합니다. 중복 요소는 허용되지 않습니다.
- TreeSet 클래스가 동기화되지 않았습니다.
- TreeSet은 삽입 순서를 유지하지 않지만 TreeSet의 요소는 자연 순서에 따라 정렬됩니다.
- TreeSet 객체를 생성하는 동안 사용자 지정 비교기를 사용하여 TreeSet을 정렬 할 수 있습니다.
- TreeSet은 일반적으로 자연스럽게 정렬되는 엄청난 양의 정보를 저장하는 데 사용됩니다. 이것은 쉽고 빠른 액세스를 돕습니다.
TreeSet 클래스 선언
Java는 TreeSet 데이터 구조의 기능을 포함하는 'TreeSet'라는 클래스를 제공합니다. TreeSet 클래스는 java.util 패키지의 일부입니다.
Java 프로그램에 TreeSet 클래스를 포함하려면 아래와 같이 import 문을 사용해야합니다.
import java.util.TreeSet;
또는
import java.util.*;
TreeSet 클래스의 일반적인 선언은 다음과 같습니다.
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
클래스 선언에서 볼 수 있듯이 TreeSet 클래스는 AbstractSet을 확장하고 NavigableSet, Cloneable 및 Serializable 인터페이스를 구현합니다.
TreeSet 클래스의 클래스 계층 구조는 다음과 같습니다.
내부 구현
TreeSet이 NavigableSet 인터페이스를 구현하고 SortedSet 클래스를 확장한다는 것을 알고 있습니다.
내부적으로 TreeSet 생성자는 다음과 같이 정의됩니다.
public TreeSet() { this(new TreeMap()); }
위의 TreeSet 생성자 정의에서 볼 수 있듯이 TreeMap 개체가 호출됩니다. 따라서 내부적으로는 TreeSet에 대해 구현 된 TreeMap 개체입니다. 따라서 TreeSet에 요소를 추가하는 동안 키가 기본적으로 정렬되는 TreeMap에 키가 추가됩니다.
에 따라 TreeSet에 대한 Oracle 문서 ,
'TreeSet은 TreeMap을 기반으로 한 NavigableSet 구현입니다.'
Java TreeSet 예제
다음 Java 프로그램은 TreeSet을 보여주는 간단한 예제를 보여줍니다. 이 프로그램에서는 간단한 Color TreeSet을 정의했습니다. 여기에 요소를 추가 한 다음 표시합니다. 요소는 자연 순서대로 표시됩니다.
import java.util.*; class Main{ public static void main(String args()){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
산출:
TreeSet 내용 :
블루 그린 레드 옐로우
TreeSet을 통해 반복
TreeSet의 개별 요소에 액세스하려면 TreeSet을 반복해야합니다. 즉, TreeSet을 통과해야합니다.
TreeSet에 대한 Iterator를 선언하여이를 수행 한 다음이 Iterator를 사용하여 각 요소에 액세스합니다. 이를 위해 TreeSet에서 다음 요소를 반환하는 반복기의 next () 메서드를 사용합니다.
다음 Java 프로그램은 Iterator를 사용하여 TreeSet을 반복하는 방법을 보여줍니다.
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String() args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
산출:
트리 세트 : (5, 10, 15, 20, 25)
반복자를 사용하는 TreeSet : 5, 10, 15, 20, 25,
qa 테스트 인터뷰 질문 및 경험이 풍부한 답변
Java의 TreeSet 비교기
기본적으로 TreeSet은 자연스럽게 정렬됩니다. 새로운 비교기 클래스를 정의하여 사용자 정의 된 순서로 TreeSet을 정렬 할 수도 있습니다. 이 비교기 클래스에서 TreeSet의 요소를 정렬하려면 '비교'메서드를 재정의해야합니다. 그런 다음이 비교기 객체는 TreeSet 생성자에 전달됩니다.
다음 Java 프로그램은 비교기를 사용하여 TreeSet을 정렬하는 방법을 보여줍니다.
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String() args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
산출:
TreeSet : (푸네, 인도 르, 하이데라바드, 방갈 루루)
위의 프로그램은 주어진 TreeSet을 역순으로 알파벳순으로 정렬하기 위해 Comparator 클래스를 구현합니다.
추천 자료 = >> 자바 비교기 인터페이스
TreeSet API / 메소드 및 생성자
이 섹션에서는 TreeSet 클래스의 API에 대해 설명합니다. 여기에서는 TreeSet 클래스에서 제공하는 생성자와 메서드에 대해 설명합니다.
TreeSet 클래스는 TreeSet 객체를 생성하기 위해 오버로드 된 생성자를 제공합니다.
이러한 생성자를 다음과 같이 표로 만들었습니다.
생성자
생성자 프로토 타입 | 기술 | |
---|---|---|
포함 | 부울 포함 (Object o) | TreeSet에 주어진 요소가 포함되어 있는지 확인합니다. 존재하면 참. |
TreeSet () | 비어있는 새 TreeSet 개체를 만들기위한 기본 생성자입니다. | |
TreeSet (콜렉션 c) | 지정된 컬렉션 c의 요소를 포함하는 새 TreeSet 객체를 생성하며, 자연 순서대로 정렬됩니다. | |
TreeSet (비교기 비교기) | 비어 있고 지정된 비교 자에 따라 정렬 될 새로운 TreeSet 객체를 생성합니다. | |
TreeSet (SortedSet) | 지정된 sortedSet의 요소를 포함하는 새 TreeSet 객체를 만듭니다. |
행동 양식
다음으로 TreeSet 클래스에서 제공하는 다양한 메서드를 표로 만들어 보겠습니다.
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
더하다 | 부울 더하기 (E e) | TreeSet에 아직없는 경우 지정된 요소를 추가합니다. |
addAll | 부울 addAll (콜렉션 c) | 주어진 콜렉션 c의 모든 요소를 세트에 추가합니다. |
천장 | E 천장 (E e) | e (최소 요소)보다 크거나 같은 요소를 반환합니다. 요소가 없으면 null입니다. |
맑은 | 무효 지우기 () | TreeSet에서 모든 요소를 삭제합니다. |
복제하다 | 개체 복제 () | TreeSet 객체의 얕은 복사본을 반환합니다. |
비교기 | 비교기 비교기 () | TreeSet에 대한 비교기를 반환하거나 자연 순서가 사용되는 경우 null을 반환합니다. |
내림차순 | 내림차순 반복자 반복자 () | TreeSet의 요소에 대해 내림차순 반복기를 반환합니다. |
내림차순 | NavigableSet 내림차순 Set () | TreeSet의 요소보기를 역순으로 반환합니다. |
먼저 | E 먼저 () | TreeSet에서 첫 번째 또는 가장 낮은 요소를 반환합니다. |
바닥 | E 층 (E e) | TreeSet의 지정된 요소 e보다 작거나 같은 요소를 반환합니다. 그러한 요소가 없으면 null을 반환합니다. |
헤드폰 | SortedSet 헤드 세트 (E toElement) | 주어진 toElement보다 엄격하게 작은 요소 집합을 반환합니다. |
NavigableSet headSet (E toElement, 부울 포함) | 주어진 toElement와 같거나 (포함 = true 인 경우) 작은 요소 세트를 리턴합니다. | |
더 높은 | E 더 높음 (E e) | 이 집합에서 주어진 요소보다 훨씬 큰 최소 요소를 반환하거나, 그러한 요소가 없으면 null을 반환합니다. |
비었다 | 부울 isEmpty () | TreeSet이 비어 있는지 확인합니다. 비어 있으면 true를 반환합니다. |
반복자 | 반복기 반복기 () | TreeSet에 대한 반복기 (오름차순)를 반환합니다. |
마지막 | E 마지막 () | TreeSet에서 가장 높은 또는 마지막 요소를 반환합니다. |
보다 낮은 | E 낮음 (E e) | TreeSet의 지정된 요소 e보다 엄격하게 작은 요소 (가장 큰 요소)를 반환합니다. |
pollFirst | E pollFirst () | 집합에서 첫 번째 (가장 낮은) 요소를 제거하고 반환합니다. 세트가 비어 있으면 null입니다. |
pollLast | E pollLast () | 집합에서 마지막 (가장 큰) 요소를 제거하고 반환합니다. 비어있는 경우 null입니다. |
없애다 | 부울 제거 (Object o) | 세트에서 주어진 요소를 제거합니다. |
크기 | int 크기 () | TreeSet에있는 요소의 크기 또는 수를 반환합니다. |
서브 세트 | NavigableSet 하위 집합 (E fromElement, 부울 fromInclusive, E toElement, 부울 toInclusive) | fromElement에서 toElement까지의 요소보기를 리턴합니다. |
SortedSet 하위 집합 (E fromElement, E toElement) | fromElement (포함)에서 toElement (제외)까지의 뷰 요소를 반환합니다. | |
tailSet | SortedSet tailSet (E fromElement) | 주어진 fromElement보다 크거나 같은 요소를 포함하는 뷰를 반환합니다. |
NavigableSet tailSet (E fromElement, 부울 포함) | 요소가 fromElement보다 같거나 (포함이 true 인 경우)보기를 리턴합니다. |
Java 8의 TreeSet
TreeSet의 경우 Java 8 버전에는 주요 변경 사항이 없습니다. 모든 메소드와 생성자는 Java 8 이상 버전에서 작동합니다.
Java에서 TreeSet 구현
다음 Java 프로그램은 위에서 설명한 대부분의 TreeSet 메서드를 구현합니다.
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String() args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
산출:
나무 세트 내용 : 10 15 25 30 35
천장 (25) : 25
바닥 (25) : 25
TreeSet contains (15) : true
나무 세트 크기 : 5
TreeSet 첫 번째 요소 : 10
TreeSet 마지막 요소 : 35
TreeSet에서 요소 30이 제거되었습니다.
제거 후 TreeSet () : 10 15 25 35
제거 후 TreeSet 크기 () : 4
헤드셋 : (10, 15, 25)
클리어 후 트리 세트 크기 () : 0
위 프로그램에서는 TreeSet 객체를 정의한 다음 'add'메소드를 사용하여 요소를 추가합니다. 다음으로 ArrayList를 정의합니다. 그런 다음 'addAll'메서드를 사용하여 ArrayList의 요소를 TreeSet에 추가합니다. 나중에 Iterator, ceiling, floor, first, last, contains, size, isEmpty 등과 같은 다양한 TreeSet 메서드를 시연합니다.
TreeSet 대 HashSet
TreeSet과 HashSet의 몇 가지 차이점을 살펴 보겠습니다.
TreeSet | HashSet |
---|---|
요소는 자연 순서대로 정렬됩니다. | 요소는 정렬되지 않습니다. |
삽입, 삭제 및 검색과 같은 작업에 O (log N) 시간이 걸리므로 TreeSet보다 느립니다. | 삽입, 삭제 및 검색과 같은 기본 작업에 일정한 시간이 걸리므로 TreeSet보다 빠릅니다. |
null 개체를 허용하지 않습니다. | null 개체를 허용합니다. |
compareTo () 메서드를 사용하여 두 개체를 비교합니다. | 비교 () 및 같음 () 메서드를 사용하여 두 개체를 비교합니다. |
Navigable TreeMap을 사용하여 내부적으로 구현되었습니다. | HashMap을 사용하여 내부적으로 구현되었습니다. |
다양한 조작이 가능한 풍부한 기능의 API가 있습니다. | HashSet의 기능 API는 다소 제한적입니다. |
자주 묻는 질문
Q # 1) TreeSet이란 무엇입니까?
대답: TreeSet은 중복 값을 허용하지 않는 SortedSet의 구현입니다. TreeSet의 요소는 기본적으로 오름차순으로 정렬됩니다.
질문 # 2) Java에서 TreeSet에 요소를 어떻게 추가합니까?
대답: TreeSet 클래스는 특정 요소를 TreeSet에 추가하는 데 사용되는 add 메서드를 제공합니다. 또한 'addAll'메소드를 제공합니다. 이 메서드는 다른 컬렉션을 인수로 받아 들인 다음이 컬렉션의 모든 요소를 TreeSet에 추가합니다.
질문 # 3) TreeSet은 스레드로부터 안전합니까?
대답: 아니요. TreeSet은 스레드로부터 안전하지 않습니다. 따라서 다중 스레드 환경에서 TreeSet을 작동하는 방법을 관리해야합니다.
질문 # 4) TreeSet이 중복 될 수 있습니까?
대답: 아니요. TreeSet은 중복을 허용하지 않습니다.
질문 # 5)TreeSet은 Java에서 null을 허용합니까?
대답: 예. TreeSet에 null 요소가있을 수 있습니다.
결론
이것으로 TreeSet에 대한 튜토리얼을 마쳤습니다. TreeSet은 중복을 허용하지 않지만 null 값을 허용하는 SortedSet 구현입니다. TreeSet의 요소는 기본적으로 자연 순서에 따라 오름차순으로 정렬됩니다.
우리는 선언 및 다양한 생성자 및 메서드와 함께 TreeSet 클래스의 기본 사항을 살펴 보았습니다.
이후 튜토리얼에서는 나머지 Java 컬렉션 클래스에 대해 설명합니다.