23 Ocak 2015 Cuma

Set && Map

      S.a. Arkadaşlar,
      Bugünkü konumuzda yine koleksiyonlardan devam edeceğiz , fakat bu sefer farklı bir yazıyla devam edeceğiz. Bu sefer de set ve map sınıflarını inceleyeceğiz. Öncelikle Set sınıfımızla başlayalım. Set sınıfımızda hashSet,linkedHashSet ve treeSet lerden bahsedeceğiz. Genel olarak arrayListlerle aynı olsa da bazı yönleriyle farklıdır gösterirler. Mesela aynı 2 eleman eklenemez. Derleyici hata vermez, fakat hafızasına bir adetini alır. treeSette order ve sorted iken diğerleri bu iki özelliği aynı anda taşımaz. Daha önce de zaman zaman açıkladık ordered ve sorted konusunu yine kısaca söylemek gerekirse bir tür sıralamadır int ve String arasında. Bu nedenle TreeSetlerde farklı tipler kullanılamaz. Çünkü String ile int karşılaştıramaz, ama diğer ikisinde ise jenerik ile kısıtlama yapılmadığı sürece kısıtlama yapılabilir. Örnekle söyleyecek olursak

public class TreeSetTest {
    public static void main(String[] args) {
LinkedHashSet<Number> linkedHashSet = new LinkedHashSet <Number>();
           
linkedHashSet.add(2);//normalde aynı elemanı 2 defa bulundurmaz
linkedHashSet.add(2L);//fakat bu değişkenlerin her biri farklı tiptedir
linkedHashSet.add((short)2);
        for(Number aaa: linkedHashSet) System.out.println(" " + aaa);
             
Set treeSet = new TreeSet();
        Set<Number> ts1= new TreeSet<Number>() ;
//treeSet.add((short)10);//türü short olduğundan yine hata
treeSet.add(20);
//treeSet.add("ClassCastException");
        for(Object aa: treeSet) System.out.println(" " + aa);
}
}

      Kısaca Setler böyle , ArrayListle benzerlikleri çok fazla, o yüzden önemli gördüğümüz bir kaç noktayı belirtmiş olduk. Şimdi de maplara geçiyoruz. Map kısmını da 4 başlık altında inceleyeceğiz. Bu üç başlığa geçmeden önce maplerin genel özelliklerinden biraz bahsedelim. 2 kısımdan oluşurlar. 1.si key 2.si value kısmıdır. 1.kısım primer key gibidir. Yani değerleri farklı olmak zorundadır, fakat value değeri birden farklı değerler alabilirler. Eğer key kısmında birden fazla aynı değer varsa en altta olan değer geçerli sayılacaktır. Bunun sebebi override etmesidir. Şimdi de bahsettiğimiz 4 kısmına geçelim. Onlardan da kısaca bahsedip daha sonra da kodla açıklamaya çalışalım.

HashMap: Unordered ve Unsorted. null değerler alabilir. Farklı değişkenler alabilir
Hashtable: null değerler alamaz.
LinkedHashMap:. Null değer alabilir.
TreeMap: Sıralıdır ve ordered. Bu yüzden aynı tip değişken alır

    Burada HashMap ve Hashtable HashSet ile benzerlik özellikler gösterse de LinkedHashMap burada biraz daha farklı , bu yüzden biz de ağırlığımızı LinkedHashMap üzerine vermeyi düşünüyoruz.

    public static void main(String[] args) {
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();

treeMap.put(1, "one");
treeMap.put(2, "two");
treeMap.put(30, "thirty");
treeMap.put(40, "forty");
treeMap.put(50, "fifty");
treeMap.put(70, "seventy");
treeMap.put(100, "hundred");

// ceilingEntry(key) 41den büyük en küçük sayı döndürür
        //40 yazsak 40 key/value kısmını seçecekti
Entry<Integer, String> ceilingEntry = treeMap.ceilingEntry(40);
Integer ceilingEntryKey = ceilingEntry.getKey();
String ceilingEntryValue = ceilingEntry.getValue();
System.out.println("ceilingEntryKey: " + ceilingEntryKey);
System.out.println("ceilingEntryValue: " + ceilingEntryValue);

// higherEntry(key)  40den küçük en büyük key/value döndürür
        //40 olsa dahi 40ı almaz, dikkat !!
Entry<Integer, String> higherEntry = treeMap.higherEntry(40);
Integer higherEntryKey = higherEntry.getKey();
String higherEntryValue = higherEntry.getValue();
System.out.println("higherEntryKey: " + higherEntryKey);
System.out.println("higherEntryKey: " + higherEntryValue);

// floorEntry(key)  kendisinden küçük en büyük sayıyı döndürür
        //aynı değer varsa onu seçer
Entry<Integer, String> floorEntry = treeMap.floorEntry(30);
Integer floorEntryKey = floorEntry.getKey();
String floorEntryValue = floorEntry.getValue();
System.out.println("floorEntryKey: " + floorEntryKey);
System.out.println("floorEntryValue: " + floorEntryValue);

        // floorEntry(key)  kendisinden küçük en büyük sayıyı döndürür
        //aynı değer varsa onu seçmez
Entry<Integer, String> lowerEntry = treeMap.lowerEntry(30);
Integer lowerEntryKey = lowerEntry.getKey();
String lowerEntryValue = lowerEntry.getValue();
System.out.println("lowerEntryKey: " + lowerEntryKey);
System.out.println("lowerEntryValue: " + lowerEntryValue);

        //ilk değeri döndürür
        Entry<Integer, String> firstEntry = treeMap.firstEntry();
Integer firstKey = treeMap.firstKey();
        System.out.println("ilk Deger:" + firstKey);
             
        //son değeri döndürrü
Entry<Integer, String> lastEntry = treeMap.lastEntry();
Integer lastKey = treeMap.lastKey();
        System.out.println("Son Deger:" + lastKey);
             
        //ilk değeri döndürür ve siler
        Entry<Integer, String> pollFirstEntry = treeMap.pollFirstEntry();
        //son değeri döndürür ve siler
        Entry<Integer, String> pollLastEntry = treeMap.pollLastEntry();
             
        //Mapin son hali. ilk ve son elemanları silinmiş!!
        for(Object key: treeMap.keySet()) System.out.println(key);
       }

    Burada TreeMapin bazı metodlarına baktık , unutmayın bu metodları TreeSet ile de kullanabiliriz. Örnekleri çoğaltıp sizler de kafanıza takılan yerleri cevaplandırabilirsiniz. İyi çalışmalar Kolay gelsin

Hiç yorum yok:

Yorum Gönder