Java ile TreeMap kullanımı

Başlayalım
TreeMap nedir ?
Java programlama dilinde TreeMap yapısı: Map interface'i ile Navigable Map yapısının birlikte kullanılmasına olanak tanır. Burada kullanıllan Map yapısı tanımlanan key değerleri ile veya map'i oluştururken belirlenen bir sıralayıcı ile sıralanabilir. Bu işlem tanımlamada kullanılan constructor ile alakalıdır. TreeMap yapısı bu özelliği ile bizlere sıralı ve verimli bir key-value collection sınıfı sağlamaktadır.
TreeMap yapısı asenkron çalışan bir yapıdır. Bu demek oluyor ki TreeMap yapısı multithread kullanımlarda, farklı threadların aynı anda erişimine izin vermektedir.
Aşağıda TreeMap nesnesinin oluşturulma örnekleri gösterilmiştir.
TreeMap treeMap = new TreeMap<>();
treeMap.put(1, "Burak");
treeMap.put(2, "Hamdi");
treeMap.put(3, "Tufan");
Map map = new HashMap<>();
map.put(1, "The");
map.put(2, "Code");
map.put(3, "Program");
TreeMap treeMap2 = new TreeMap(map);
System.out.println(treeMap);
System.out.println(treeMap2);
System.out.println(treeMap.get(2));
System.out.println(treeMap2.get(2));
System.out.println(treeMap.containsKey(1));
System.out.println(treeMap.containsValue("Hamdi"));
System.out.println(treeMap.containsValue("harici"));
Program Çıktısı
{1=Burak, 2=Hamdi, 3=Tufan}
{1=The, 2=Code, 3=Program}
Hamdi
Code
true
true
false
TreeMap içerisine eklenen değerler, key-value çiftlerinden keylere göre sıralanır. Treemap sınıfı,i kendi içinde değere göre sıralama fonksiyonu bulunmamaktadır.
TreeMap treeMap3 = new TreeMap<>();
treeMap3.put(3, "Tufan");
treeMap3.put(2, "Hamdi");
treeMap3.put(1, "Burak");
System.out.println(treeMap3);
Program çıktısı aşağıdaki gibi olacaktır:
{1=Burak, 2=Hamdi, 3=Tufan}
Peki syncronize olmayan TreeMap yapısını synchronize olarak kullanmak istersek?
Syncronize olmayan TreeMap kullanıldığında multi-thread çalışmalarda, aynı anda yapılmaya çalışılan eleman güncelleme işlemlerinde problemler oluşabilmektedir. Bu yüzden Collections içerisinde bulunan synchronized metodlarından ilgili olan ile TreeMap yapısı başlatılmaktadır. Bu işlem direk olarak oluşturma zamanında yapılmaktadır.
NavigableMap m = Collections.synchronizedNavigableMap(new TreeMap());
Map smap = Collections.synchronizedMap(new TreeMap());
SortedMap sm = Collections.synchronizedSortedMap(new TreeMap());
Peki TreeMap yapısının çalışma mantığı nedir
TreeMap yapısının çalışma mantığı, Red-Black tree algoritmasını kullanarak verilerin key değerleri az alınarak sıralanmasıdır. HashMap yapıları gibi elemanlar şifrelenmediği için performans olarak ciddi hız kazandırmaktadır.
TreeMap treeMap4 = new TreeMap<>();
treeMap4.put(1, "Burak");
treeMap4.put(2, "Hamdi");
treeMap4.put(3, "Tufan");
treeMap4.put(4, "The");
treeMap4.put(5, "Code");
treeMap4.put(6, "Program");
System.out.println( "KeySet : " + treeMap4.keySet());
System.out.println( "Values : " + treeMap4.values() );
System.out.println( "EntrySet : " + treeMap4.entrySet() );
System.out.println( "SubMap : " + treeMap4.subMap(2, 5));
System.out.println( "firstKey : " + treeMap4.firstKey());
System.out.println( "lastKey : " + treeMap4.lastKey());
TreeMap shallowClone = (TreeMap)treeMap4.clone();
System.out.println( "Clone : " + shallowClone);
shallowClone.remove(2);
System.out.println( "remove : " + shallowClone);
shallowClone.clear();
System.out.println( "clear : " + shallowClone);
KeySet : [1, 2, 3, 4, 5, 6]
Values : [Burak, Hamdi, Tufan, The, Code, Program]
EntrySet : [1=Burak, 2=Hamdi, 3=Tufan, 4=The, 5=Code, 6=Program]
SubMap : {2=Hamdi, 3=Tufan, 4=The}
firstKey : 1
lastKey : 6
Clone : {1=Burak, 2=Hamdi, 3=Tufan, 4=The, 5=Code, 6=Program}
remove : {1=Burak, 3=Tufan, 4=The, 5=Code, 6=Program}
clear : {}
Bu anlatımımızda buraya kadar.
Örnek kod dosyasına Github üzerinden aşağıdaki link aracılığı ile ulaşabilirsiniz. https://github.com/thecodeprogram/TheSingleFiles/blob/master/TreeMapOrnek.java
Burak Hamdi TUFAN