Collections 7 – Set Implementation TreeSet
Merhabalar arkadaşlar. Bu yazıda Set Interfa’in implementasyonlarından TreeSet‘i öğreneceğiz. TreeSet NavigableSet üzerine inşa edilmiş bir Set implementasyonudur. NavigableSet belirlenmiş olan hedefdeki değer yönelik en yakın karşılaştırma sonucunu verebilecek metotlarla hazırlanmış bir yapıdır. TreeSet’de bu özellikleri ihtiva eder. TreeSet içerisinde elemanlar ya doğal sırada korunurlar ya da Set’in oluşturulması işlemi sırasında yapılandırıcıya verilecek Comparator interfacesi türü bir nesne ile verilerin nasıl saklanacağı belirlenir. Comparator arabirimi sizin Set’in içinde verileri nasıl saklayacağınızı tarif etmeye yarayan bir arabirimdir.
TreeSet arabirimi temel işlemler için (add,remove,contains) log(n) zamanda bu işi yapmayı garanti eder. TreeSet’in de Senkronize bir implementasyon olmadığını unutmayalım ve onu senkronize etmek istersek şu kodu kullanabiliriz:
SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...)); TreeSet sınıfının 4 adet yapılandırıcı vardır. Bunlar şu şekildedir: 1. TreeSet() : Yeni bir TreeSet nesnesi oluşturur. Elemanların sırası doğal sıradadır yani örneğin String tipinde veri saklanacaksa ASCII kodları devreye girer. 2. TreeSet(Collection<? extends E> c) : Yapılandırıcıya verilmiş olan Collection'ın elemanlarını barındırarak ile yeni bir TreeSet oluşturulur. Elemanların sırası doğal sıradadır. 3. TreeSet(Comparator<? super E> comparator) : Yeni, boş bir TreeSet oluşturur fakat elamanların sıralaması bu kez yapılandırıcıya parametre olarak verilmiş olan Comparator'a göre yapılır. 4. TreeSet(SortedSet<E> s) : Yapılandırıcıya parametre olarak verilmiş SortedSet'deki elemanları barındırarak ve aynı sırayı uygulayarak yeni bir TreeSet oluşturur.
Şimdi bir örnek yapalım TreeSet kullanarak:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package collections;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
/**
*
* @author ilkaygunel
*/
public class TreeSetExample {
public static void main(String[] args) {
List<String> surnameList = new ArrayList<>();
surnameList.add("demir");
surnameList.add("akkuş");
surnameList.add("aytimur");
TreeSet<String> names = new TreeSet<>();
names.add("mustafa");
names.add("alican");
names.add("isa");
names.add("mustafa1");
names.addAll(surnameList);
System.out.println("--- Names Seti ---");
for (String name : names) {
System.out.println(name);
}
Iterator<String> descendingIterator = names.descendingIterator();
Iterator<String> iterator = names.iterator();
System.out.println("--- descendingIterator Kullanımı ---");
while (descendingIterator.hasNext()) {
String nextElement = descendingIterator.next();
System.out.println(nextElement);
}
System.out.println("--- Iterator Kullanımı ---");
while(iterator.hasNext()){
String nextElement = iterator.next();
System.out.println(nextElement);
}
System.out.println("TreeSet'deki İlk Eleman:"+names.first());
System.out.println("TreeSet'deki Son Eleman:"+names.last());
System.out.println("Ceiling Verilen Parameteye En Yakın Değeri Döndürür:"+names.ceiling("mustaf"));
System.out.println("Floor Verilen Parametreden Küçük Ya Da Parametreye Eşit En Büyük Değeri Döndürür:"+names.floor("mustaf"));
System.out.println("Heigher Verilen Parameteden Küçük En Büyük Değeri Döndürür:"+names.higher("mustaf"));
System.out.println("Lower Verilen Parameteden Küçük En Büyük Değeri Döndürür:"+names.lower("mustafa1"));
System.out.println("headSet metodu verilen parametreye kadar olan değerlerden bir SortedSet döndürür.");
SortedSet<String> sortedSet = names.headSet("demir");
for (String string : sortedSet) {
System.out.println(string);
}
}
}
- Örneğimizde bir TreeSet nesnesi elde ediyoruz ve ona add() metodu ile değerler ekliyoruz. addAll() metodu bir Colelcton’ı diğerine enjekte etmeye yarar ve burada da bir List’i TreeSet’e koyuyoruz.
- TreeSet’den ters taraflı gidebilcek bir descendingIterator ve normal sırada gidecek bir iterator nesnesi üretip bunları kullanıyoruz.
- TreeSet içindeki first metodu ilk sıradaki elemanı, last ise son sıradaki elemanı döndürür. Tabii burada nasıl sıralama yaptığınıza dikkat edip ona göre ilk son eleman çağrımı yapamalısınız.
- Ceiling Verilen Parameteden Büyük Ya Da Parametreye Eşit En Küçük Değeri Döndürür.
- Floor Verilen Parametreden Küçük Ya Da Parametreye Eşit En Büyük Değeri Döndürür.
- Heigher Verilen Parameteden Küçük En Büyük Değeri Döndürür.
- Lower Verilen Parameteden Küçük En Büyük Değeri Döndürür.
- headSet metodu bizim verdiğimiz parametreye kadar olan kısmı alır, parametrede durur ve o kısımdan bir SortedSet türetir.
Konsol Çıktısı
[]
Bu yazıda da bu kadar arkadaşlar. Gelecek yazıda görüşene kadar sağlıcakla kalın.
TreeSet Hakkındaki Oracle Dökümanı: https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html