logo

Клас Java TreeSet

Ієрархія класів TreeSet

Клас Java TreeSet реалізує інтерфейс Set, який використовує дерево для зберігання. Він успадковує клас AbstractSet і реалізує інтерфейс NavigableSet. Об'єкти класу TreeSet зберігаються в порядку зростання.

Важливі моменти про клас Java TreeSet:

  • Клас Java TreeSet містить лише унікальні елементи, такі як HashSet.
  • Доступ до класу Java TreeSet і час отримання тихо швидкі.
  • Клас Java TreeSet не дозволяє нульовий елемент.
  • Клас Java TreeSet не синхронізований.
  • Клас Java TreeSet підтримує порядок зростання.
  • Клас Java TreeSet містить лише унікальні елементи, такі як HashSet.
  • Доступ до класу Java TreeSet і час отримання досить швидкі.
  • Клас Java TreeSet не допускає нульових елементів.
  • Клас Java TreeSet не синхронізований.
  • Клас Java TreeSet підтримує порядок зростання.
  • TreeSet може дозволяти лише ті загальні типи, які можна порівняти. Наприклад, інтерфейс Comparable реалізується класом StringBuffer.

Внутрішня робота класу TreeSet

TreeSet реалізується за допомогою бінарного дерева пошуку, яке самобалансується, як червоно-чорне дерево. Таким чином, такі операції, як пошук, видалення та додавання, споживають O(log(N)) часу. Причина цього полягає в самобалансуючому дереві. Він існує для того, щоб висота дерева ніколи не перевищувала O(log(N)) для всіх згаданих операцій. Таким чином, це одна з ефективних структур даних для зберігання великих даних, які сортуються, а також для виконання операцій з ними.

Синхронізація класу TreeSet

Як уже згадувалося вище, клас TreeSet не синхронізований. Це означає, що якщо декілька потоків одночасно отримують доступ до дерева, і один із потоків, які мають доступ, змінює його, то синхронізацію потрібно виконувати вручну. Зазвичай це робиться за допомогою певної синхронізації об’єктів, яка інкапсулює набір. Однак у випадку, коли такий об’єкт не знайдено, набір потрібно обернути за допомогою методу Collections.synchronizedSet(). Рекомендується використовувати метод під час створення, щоб уникнути несинхронізованого доступу до набору. Наступний фрагмент коду показує те саме.

 TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet); 

Ієрархія класу TreeSet

Як показано на схемі вище, клас Java TreeSet реалізує інтерфейс NavigableSet. Інтерфейс NavigableSet розширює інтерфейси SortedSet, Set, Collection та Iterable в ієрархічному порядку.

баран актор

Оголошення класу TreeSet

Давайте подивимося оголошення для класу java.util.TreeSet.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Конструктори класу Java TreeSet

Конструктор опис
TreeSet() Він використовується для створення порожнього набору дерева, яке буде відсортовано в порядку зростання відповідно до природного порядку набору дерева.
TreeSet (колекція c) Він використовується для побудови нового дерева, яке містить елементи колекції c.
TreeSet (компаратор компаратора) Він використовується для створення порожнього дерева, яке буде відсортовано відповідно до заданого компаратора.
TreeSet(SortedSet s) Він використовується для створення TreeSet, який містить елементи заданого SortedSet.

Методи класу Java TreeSet

метод опис
логічне додавання (E e) Він використовується для додавання зазначеного елемента до цього набору, якщо його ще немає.
логічне значення addAll(Collection c) Він використовується для додавання всіх елементів у вказаній колекції до цього набору.
E стеля (E e) Він повертає рівний або найближчий найбільший елемент зазначеного елемента з набору або null, якщо такого елемента немає.
Компаратор comparator() Він повертає компаратор, який розташовує елементи по порядку.
Ітератор descendingIterator() Він використовується для повторення елементів у порядку спадання.
NavigableSet descendingSet() Він повертає елементи у зворотному порядку.
E поверх (E e) Він повертає рівний або найближчий найменший елемент зазначеного елемента з набору або null, якщо такого елемента немає.
SortedSet headSet(E toElement) Він повертає групу елементів, менших за вказаний елемент.
NavigableSet headSet(E toElement, логічне значення включно) Він повертає групу елементів, які менші або дорівнюють (якщо включно істина) вказаному елементу.
E вище (E e) Він повертає найближчий найбільший елемент зазначеного елемента з набору або null, якщо такого елемента немає.
Ітератор iterator() Він використовується для повторення елементів у порядку зростання.
E нижче (E e) Він повертає найближчий найменший елемент зазначеного елемента з набору або null, якщо такого елемента немає.
E pollFirst() Він використовується для отримання та видалення найнижчого (першого) елемента.
E pollLast() Він використовується для отримання та видалення найвищого (останнього) елемента.
Spliterator spliterator() Він використовується для створення розділювача над елементами з пізнім зв’язуванням і швидкого відмов.
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) Він повертає набір елементів, які знаходяться між заданим діапазоном.
SortedSet subSet(E fromElement, E toElement)) Він повертає набір елементів, які знаходяться між заданим діапазоном, який включає fromElement і виключає toElement.
SortedSet tailSet(E fromElement) Він повертає набір елементів, які більші або рівні вказаному елементу.
NavigableSet tailSet(E fromElement, boolean inclusive) Він повертає набір елементів, які більші або дорівнюють (якщо включно має значення true) зазначеному елементу.
логічний містить (об'єкт o) Він повертає true, якщо цей набір містить вказаний елемент.
логічне isEmpty() Він повертає true, якщо цей набір не містить елементів.
логічне видалення (об'єкт o) Він використовується для видалення зазначеного елемента з цього набору, якщо він присутній.
void clear() Він використовується для видалення всіх елементів із цього набору.
Об'єкт clone() Він повертає поверхневу копію цього екземпляра TreeSet.
E перший() Він повертає перший (найнижчий) елемент у цьому відсортованому наборі.
E останній() Він повертає останній (найвищий) елемент у цьому відсортованому наборі.
int size() Він повертає кількість елементів у цьому наборі.

Приклади Java TreeSet

Приклад 1 Java TreeSet:

Давайте розглянемо простий приклад Java TreeSet.

Ім'я файлу: TreeSet1.java

 import java.util.*; class TreeSet1{ public static void main(String args[]){ //Creating and adding elements TreeSet al=new TreeSet(); al.add('Ravi'); al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); //Traversing elements Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 
Перевірте зараз

Вихід:

Ajay Ravi Vijay 

Приклад Java TreeSet 2:

Розглянемо приклад обходу елементів у порядку спадання.

pd.merge

Ім'я файлу: TreeSet2.java

 import java.util.*; class TreeSet2{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ajay'); System.out.println('Traversing element through Iterator in descending order'); Iterator i=set.descendingIterator(); while(i.hasNext()) { System.out.println(i.next()); } } } 
Перевірте зараз

Вихід:

Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay 

Приклад 3 Java TreeSet:

Давайте розглянемо приклад отримання та видалення найвищого та найнижчого значення.

Ім'я файлу: TreeSet3.java

альтернатива mylivecricket
 import java.util.*; class TreeSet3{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add(24); set.add(66); set.add(12); set.add(15); System.out.println('Lowest Value: '+set.pollFirst()); System.out.println('Highest Value: '+set.pollLast()); } } 

Вихід:

 Lowest Value: 12 Highest Value: 66 

Приклад Java TreeSet 4:

У цьому прикладі ми виконуємо різні операції NavigableSet.

Ім'я файлу: TreeSet4.java

java ціле число в рядок
 import java.util.*; class TreeSet4{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('A'); set.add('B'); set.add('C'); set.add('D'); set.add('E'); System.out.println('Initial Set: '+set); System.out.println('Reverse Set: '+set.descendingSet()); System.out.println('Head Set: '+set.headSet('C', true)); System.out.println('SubSet: '+set.subSet('A', false, 'E', true)); System.out.println('TailSet: '+set.tailSet('C', false)); } } 

Вихід:

Initial Set: [A, B, C, D, E] Reverse Set: [E, D, C, B, A] Head Set: [A, B, C] SubSet: [B, C, D, E] TailSet: [D, E] 

Приклад Java TreeSet 5:

У цьому прикладі ми виконуємо різні операції SortedSetSet.

Ім'я файлу: TreeSet5.java

 import java.util.*; class TreeSet5{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('A'); set.add('B'); set.add('C'); set.add('D'); set.add('E'); System.out.println('Intial Set: '+set); System.out.println('Head Set: '+set.headSet('C')); System.out.println('SubSet: '+set.subSet('A', 'E')); System.out.println('TailSet: '+set.tailSet('C')); } } 

Вихід:

вибрати sql з кількох таблиць
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E] 

Приклад Java TreeSet: Книга

Давайте розглянемо приклад TreeSet, де ми додаємо книги до набору та друкуємо всі книги. Елементи в TreeSet мають бути типу Comparable. Класи String і Wrapper є Comparable за замовчуванням. Щоб додати об’єкти, визначені користувачем, у TreeSet, потрібно реалізувати інтерфейс Comparable.

Ім'я файлу: TreeSetExample.java

 import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } // implementing the abstract method public int compareTo(Book b) { if(id&gt;b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class treesetexample { static void main(string[] args) set treeset(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to treeset set.add(b1); set.add(b2); set.add(b3); traversing for(book b:set){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); < pre> <p> <strong>Output:</strong> </p> <pre>101 Data Communications &amp; Networking Forouzan Mc Graw Hill 4 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <h3>ClassCast Exception in TreeSet</h3> <p>If we add an object of the class that is not implementing the Comparable interface, the ClassCast Exception is raised. Observe the following program.</p> <p> <strong>FileName:</strong> ClassCastExceptionTreeSet.java</p> <pre> // important import statement import java.util.*; class Employee { int empId; String name; // getting the name of the employee String getName() { return this.name; } // setting the name of the employee void setName(String name) { this.name = name; } // setting the employee id // of the employee void setId(int a) { this.empId = a; } // retrieving the employee id of // the employee int getId() { return this.empId; } } public class ClassCastExceptionTreeSet { // main method public static void main(String[] argvs) { // creating objects of the class Employee Employee obj1 = new Employee(); Employee obj2 = new Employee(); TreeSet ts = new TreeSet(); // adding the employee objects to // the TreeSet class ts.add(obj1); ts.add(obj2); System.out.println(&apos;The program has been executed successfully.&apos;); } } </pre> <p>When we compile the above program, we get the ClassCastException, as shown below.</p> <pre> Exception in thread &apos;main&apos; java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader &apos;app&apos;; java.lang.Comparable is in module java.base of loader &apos;bootstrap&apos;) at java.base/java.util.TreeMap.compare(TreeMap.java:1569) at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776) at java.base/java.util.TreeMap.put(TreeMap.java:785) at java.base/java.util.TreeMap.put(TreeMap.java:534) at java.base/java.util.TreeSet.add(TreeSet.java:255) at ClassCastExceptionTreeSet.main(ClassCastExceptionTreeSet.java:52) </pre> <p> <strong>Explanation:</strong> In the above program, it is required to implement a Comparable interface. It is because the TreeSet maintains the sorting order, and for doing the sorting the comparison of different objects that are being inserted in the TreeSet is must, which is accomplished by implementing the Comparable interface.</p> <hr></b.id){>

Виняток ClassCast у TreeSet

Якщо ми додаємо об’єкт класу, який не реалізує інтерфейс Comparable, виникає виняткова ситуація ClassCast. Дотримуйтеся наступної програми.

Ім'я файлу: ClassCastExceptionTreeSet.java

 // important import statement import java.util.*; class Employee { int empId; String name; // getting the name of the employee String getName() { return this.name; } // setting the name of the employee void setName(String name) { this.name = name; } // setting the employee id // of the employee void setId(int a) { this.empId = a; } // retrieving the employee id of // the employee int getId() { return this.empId; } } public class ClassCastExceptionTreeSet { // main method public static void main(String[] argvs) { // creating objects of the class Employee Employee obj1 = new Employee(); Employee obj2 = new Employee(); TreeSet ts = new TreeSet(); // adding the employee objects to // the TreeSet class ts.add(obj1); ts.add(obj2); System.out.println(&apos;The program has been executed successfully.&apos;); } } 

Коли ми компілюємо наведену вище програму, ми отримуємо виняток ClassCastException, як показано нижче.

 Exception in thread &apos;main&apos; java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader &apos;app&apos;; java.lang.Comparable is in module java.base of loader &apos;bootstrap&apos;) at java.base/java.util.TreeMap.compare(TreeMap.java:1569) at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776) at java.base/java.util.TreeMap.put(TreeMap.java:785) at java.base/java.util.TreeMap.put(TreeMap.java:534) at java.base/java.util.TreeSet.add(TreeSet.java:255) at ClassCastExceptionTreeSet.main(ClassCastExceptionTreeSet.java:52) 

Пояснення: У наведеній вище програмі необхідно реалізувати інтерфейс Comparable. Це тому, що TreeSet підтримує порядок сортування, і для виконання сортування необхідно порівняти різні об’єкти, які вставляються в TreeSet, що досягається за допомогою реалізації інтерфейсу Comparable.