1 Mart 2015 Pazar

Navigable Veri Yapıları

Navigable Arayüzü Nedir?
Set, Map gibi veri yapılarında iki değer arasına düşen elemanlar, belirtilen değerden büyük, küçük elemanları gibi sorguları kolaylaştıran bir arayüz. Java 6 ile geliyor. Concurrent paketinde ConcurrentSkipListSet ve ConcurrentSkipListMap sınıfları da bu arayüzü gerçekleştiriyor.

Java
Java'da bir veri yapısının Navigable olması için aynı zamanda Sorted olması da gerekiyor. Navigable arayüzünü gerçekleştiren TreeSet ve TreeMap sınıflarıdır.


NavigableSet
NavigableSet aynı zamanda bir SortedSet. Kalıtım hiyerarşisi şöyle:
SortedSet <--- NavigableSet <-- TreeSet

Bu sınıf <,<=,>,>= şeklinde liste veya tek eleman sorgulama imkanı tanır.

aralıklar yani listeler sorgulama

headSet (< listesi)
Verilen elemandan küçük olanların listesi alınır.

headSet (<= listesi)
Metoda son parametre true olarak geçilir.
//this headset will contain "1", "2", and "3" for the reason that "inclusive"=true 
NavigableSet headset = original.headSet("3", true);

tailset (> listesi)
Verilen elemandan büyük olanlar alınabilir.

tailset (>= listesi)
Metoda son parametre true olarak geçilir.

iki değer arasındakiler [X,Y) listesi için
subset() metodu kullanılır. Metoda geçilen y değerleri sonuca dahil edilmez.
//this subset will contain "2" and "3" 
SortedSet subset = original.subSet("2", "4");


iki değer arasındakiler [X,Y] listesi için
subset() metodu kullanılır. Metoda geçilen x,y değerleri true parametresi ile kullanıdıkları için sonuca dahil edilirler.
//this subset will contain "2", "3" and "4" since // fromInclusive=true, and toInclusive=true 
NavigableSet subset = original.subSet("2", true, "4", true);


tek bir eleman sorgulama

floor (<=)
Verilen elemandan küçük eşit olan ilk eleman alınır.
Örnek
NavigableSet<Integer> set = new TreeSet<>();
set.add(0);   set.add(100);
set.add(250); set.add(500);

System.out.println(set.floor(50));  // 0
System.out.println(set.floor(300)); // 250

ceiling (>= )
Verilen elemandan büyük eşit olan ilk eleman alınır.

higher (>)
Verilen elemandan büyük olan ilk eleman alınır.

lower (<)
Verilen elemandan küçük olan ilk eleman alınır.

sıralamayı tersine çevirme
descendingIterator ve descendingSet metodları kullanılır.

descentingSet için
NavigableSet reverse = original.descendingSet();

NavigableMap
NavigableMap Arayüzü yazısına taşıdım.

TreeMap
Bir Comparator ile kullanılır.
TreeMap<String, String> t = new TreeMap<>(new Comparator<String>(){...});

C#
C#'ta Navigable veri yapısı yok. SortedDictionary TreeSet'e en yakın olan şey. O da istenilen metodları sunmuyor. Burada bazı extension metodları ile bir çözüm sunulmuş.

Navigable Olmayan Ancak Kullanışlı Diğer Veri Yapıları

LinkedHashSet
LinkedHashSet hem bir hash set hem de elemanları girilme sırasına göre (predictable iteration order) sıralı tutabilen bir veri yapısı.

LinkedHashMap
LinkedHashMap hem bir hash map hem de elemanları girilme sırasına göre (predictable iteration order) sıralı tutabilen bir veri yapısı.

Hiç yorum yok:

Yorum Gönder