Java ile TreeMap kullanımı
Herkese merhabalar, bu yazımızda sizlere Java programlama dilinde TreeMap yapısından bahsedeceğim. TreeMap ile ilgili örnekler üzerinden konuyu anlatmaya çalışacağı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<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "Burak");
treeMap.put(2, "Hamdi");
treeMap.put(3, "Tufan");
Map<Integer,String> 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<Integer, String> 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<Integer, String> m = Collections.synchronizedNavigableMap(new TreeMap());
Map<Integer, String> smap = Collections.synchronizedMap(new TreeMap());
SortedMap<Integer, String> 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<Integer, String> 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
Comments