logo

Java TreeSet sınıfı

TreeSet sınıf hiyerarşisi

Java TreeSet sınıfı, depolama için bir ağaç kullanan Set arayüzünü uygular. AbstractSet sınıfını devralır ve NavigableSet arayüzünü uygular. TreeSet sınıfının nesneleri artan sırada saklanır.

Java TreeSet sınıfıyla ilgili önemli noktalar şunlardır:

  • Java TreeSet sınıfı yalnızca HashSet gibi benzersiz öğeler içerir.
  • Java TreeSet sınıfına erişim ve alma süreleri oldukça hızlıdır.
  • Java TreeSet sınıfı boş öğeye izin vermez.
  • Java TreeSet sınıfı senkronize değil.
  • Java TreeSet sınıfı artan sırayı korur.
  • Java TreeSet sınıfı yalnızca HashSet gibi benzersiz öğeler içerir.
  • Java TreeSet sınıfına erişim ve alma süreleri oldukça hızlıdır.
  • Java TreeSet sınıfı boş öğelere izin vermez.
  • Java TreeSet sınıfı senkronize değildir.
  • Java TreeSet sınıfı artan sırayı korur.
  • TreeSet yalnızca karşılaştırılabilir genel türlere izin verebilir. Örneğin Karşılaştırılabilir arayüz, StringBuffer sınıfı tarafından uygulanıyor.

TreeSet Sınıfının İç Çalışması

TreeSet, tıpkı Kırmızı-Siyah Ağaç gibi kendi kendini dengeleyen ikili arama ağacı kullanılarak uygulanıyor. Bu nedenle arama, kaldırma ve ekleme gibi işlemler O(log(N)) zamanını tüketir. Bunun arkasındaki sebep kendi kendini dengeleyen ağaçtadır. Bahsedilen tüm işlemler için ağaç yüksekliğinin asla O(log(N)) değerini aşmamasını sağlamak için oradadır. Dolayısıyla sıralanan büyük veriyi tutmak ve aynı zamanda üzerinde işlemler yapmak için verimli veri yapılarından biridir.

TreeSet Sınıfının Senkronizasyonu

Yukarıda da belirtildiği gibi TreeSet sınıfı senkronize edilmez. Bu, birden fazla iş parçacığının aynı anda bir ağaç kümesine erişmesi ve erişen iş parçacıklarından birinin bunu değiştirmesi durumunda senkronizasyonun manuel olarak yapılması gerektiği anlamına gelir. Genellikle kümeyi kapsayan bazı nesne senkronizasyonları yapılarak yapılır. Ancak böyle bir nesnenin bulunamaması durumunda setin Collections.synchronizedSet() yöntemi yardımıyla sarılması gerekir. Setin senkronize olmayan erişimini önlemek için, yöntemin oluşturma süresi boyunca kullanılması tavsiye edilir. Aşağıdaki kod parçacığı aynısını gösterir.

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

TreeSet sınıfının hiyerarşisi

Yukarıdaki diyagramda gösterildiği gibi Java TreeSet sınıfı NavigableSet arayüzünü uygular. NavigableSet arayüzü SortedSet, Set, Collection ve Iterable arayüzlerini hiyerarşik sırayla genişletir.

java dinamik dizi

TreeSet Sınıf Bildirimi

Java.util.TreeSet sınıfının bildirimine bakalım.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Java TreeSet Sınıfının Yapıcıları

Oluşturucu Tanım
Ağaç Kümesi() Ağaç kümesinin doğal sırasına göre artan şekilde sıralanacak boş bir ağaç kümesi oluşturmak için kullanılır.
TreeSet(Koleksiyon c) C koleksiyonunun elemanlarını içeren yeni bir ağaç seti oluşturmak için kullanılır.
TreeSet(Karşılaştırıcı karşılaştırıcı) Verilen karşılaştırıcıya göre sıralanacak boş bir ağaç seti oluşturmak için kullanılır.
TreeSet(SortedSet'ler) Verilen SortedSet'in öğelerini içeren bir TreeSet oluşturmak için kullanılır.

Java TreeSet Sınıfının Yöntemleri

Yöntem Tanım
boole ekleme(E e) Belirtilen elemanın halihazırda mevcut olmaması halinde bu kümeye eklenmesi için kullanılır.
boolean addAll(Koleksiyon c) Belirtilen koleksiyondaki elemanların tamamını bu sete eklemek için kullanılır.
E tavan(E e) Kümeden belirtilen öğenin eşit veya en yakın en büyük öğesini döndürür veya null böyle bir öğe yoktur.
Karşılaştırıcı karşılaştırıcı() Öğeleri sırayla düzenleyen bir karşılaştırıcı döndürür.
Yineleyici azalanIterator() Elemanları azalan sırada yinelemek için kullanılır.
NavigableSet azalanSet() Öğeleri ters sırada döndürür.
E kat(E e) Kümeden belirtilen öğenin eşit veya en yakın en küçük öğesini döndürür veya null böyle bir öğe yoktur.
SıralanmışSetkafaSeti(E'denElement'e) Belirtilen öğeden daha küçük olan öğe grubunu döndürür.
NavigableSet headSet (E'den Element'e, boolean dahil) Belirtilen öğeden küçük veya ona eşit olan (eğer dahil doğruysa) öğe grubunu döndürür.
E daha yüksek(E e) Belirtilen öğenin kümedeki en yakın en büyük öğesini döndürür veya null böyle bir öğe yoktur.
Yineleyici yineleyici() Öğeleri artan sırada yinelemek için kullanılır.
E alt(E e) Belirtilen öğenin kümeden en yakın en küçük öğesini döndürür veya null böyle bir öğe yoktur.
E anketFirst() En düşük (ilk) elemanı almak ve kaldırmak için kullanılır.
E anketSon() En yüksek (son) öğeyi almak ve kaldırmak için kullanılır.
Ayırıcı bölücü() Öğeler üzerinde geç bağlama ve arıza hızlı bir ayırıcı oluşturmak için kullanılır.
NavigableSet alt Kümesi(E'denElement'e, Boolean'dan Inclusive'e, E'den Element'e, boolean'dan Inclusive'e) Verilen aralık arasında yer alan bir dizi öğeyi döndürür.
SortedSet subSet(E'denElement'e, E'denElement'e)) fromElement'i içeren ve toElement'i hariç tutan belirli aralık arasında yer alan bir dizi öğeyi döndürür.
SortedSet tailSet(E fromElement) Belirtilen öğeden büyük veya ona eşit olan bir dizi öğeyi döndürür.
NavigableSet tailSet(E fromElement, boolean dahil) Belirtilen öğeden büyük veya ona eşit olan (eğer dahil doğruysa) bir dizi öğe döndürür.
boolean içerir(Nesne o) Bu küme belirtilen öğeyi içeriyorsa true değerini döndürür.
boolean isEmpty() Bu küme hiçbir öğe içermiyorsa true değerini döndürür.
boolean kaldır (Nesne o) Belirtilen elemanın mevcut olması halinde bu kümeden çıkarılması için kullanılır.
geçersiz temizleme() Bu kümedeki tüm elemanları çıkarmak için kullanılır.
Nesne klonu() Bu TreeSet örneğinin yüzeysel bir kopyasını döndürür.
Önce E() Şu anda bu sıralanmış kümedeki ilk (en düşük) öğeyi döndürür.
E son() Şu anda bu sıralanmış kümedeki son (en yüksek) öğeyi döndürür.
int boyut() Bu kümedeki öğelerin sayısını döndürür.

Java TreeSet Örnekleri

Java TreeSet Örnek 1:

Java TreeSet'in basit bir örneğini görelim.

Dosya adı: 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()); } } } 
Şimdi Test Edin

Çıktı:

Ajay Ravi Vijay 

Java TreeSet Örnek 2:

Azalan sırada öğelerin çapraz geçişine ilişkin bir örnek görelim.

string.java içerir

Dosya adı: 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()); } } } 
Şimdi Test Edin

Çıktı:

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

Java TreeSet Örnek 3:

En yüksek ve en düşük Değeri almak ve kaldırmak için bir örnek görelim.

Dosya adı: TreeSet3.java

java matematik
 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()); } } 

Çıktı:

 Lowest Value: 12 Highest Value: 66 

Java TreeSet Örnek 4:

Bu örnekte çeşitli NavigableSet işlemlerini gerçekleştiriyoruz.

Dosya adı: TreeSet4.java

dizeye Java tamsayı
 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)); } } 

Çıktı:

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 Örnek 5:

Bu örnekte çeşitli SortedSetSet işlemlerini gerçekleştiriyoruz.

Dosya adı: 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')); } } 

Çıktı:

kalın için css
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E] 

Java TreeSet Örneği: Kitap

Sete kitap eklediğimiz ve tüm kitapları yazdırdığımız bir TreeSet örneğini görelim. TreeSet'teki öğeler Karşılaştırılabilir türde olmalıdır. String ve Wrapper sınıfları varsayılan olarak Karşılaştırılabilir'dir. TreeSet'e kullanıcı tanımlı nesneler eklemek için Karşılaştırılabilir arayüzü uygulamanız gerekir.

Dosya adı: 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){>

TreeSet'te ClassCast İstisnası

Karşılaştırılabilir arayüzü uygulamayan bir sınıf nesnesi eklersek, ClassCast İstisnası ortaya çıkar. Aşağıdaki programı izleyin.

Dosya adı: 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;); } } 

Yukarıdaki programı derlediğimizde aşağıdaki gibi ClassCastException’ı elde ediyoruz.

 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) 

Açıklama: Yukarıdaki programda Karşılaştırılabilir bir arayüzün uygulanması gerekmektedir. Bunun nedeni, TreeSet'in sıralama düzenini koruması ve sıralamayı yapmak için TreeSet'e eklenen farklı nesnelerin karşılaştırılmasının zorunlu olmasıdır; bu, Karşılaştırılabilir arayüzün uygulanmasıyla gerçekleştirilir.