27 Şubat 2018 Salı

TreeMap Sınıfı

Giriş
Açıklaması şöyle
Iteration is guaranteed in "natural sorted" order of keys.
constructor
Şöyle yaparız. Bu durumda key sınıfının "Comparable" arayüzünü gerçekleştirmeleri gerekir.
Map<Integer,Integer> map = new TreeMap<>();
constructor - Comparator
Key sınıfının "Comparable" arayüzünü gerçekleştirmesi gerekmez. Comparator nesnesi veririz.
Örnek - Comparator
Şöyle yaparız.
Comparator<Foo> comparator = ...;
TreeMap<Foo, List<FooValue>> map = new TreeMap<> (comparator);
Örnek - lambda
Şöyle yaparız. Key tipi olarak dizi verildiği için dizinin tüm elemanları karşılaştırılıyor.
Map<int[], String> treeMap = new TreeMap<>((o1, o2) -> {
  for (int i = 0; i < o1.length; i++) {
    if (o1[i] > o2[i]) {
      return 1;
    } else if (o1[i] < o2[i]) {
      return -1;
    }
  }
  return 0;
});
contains metodu
Şöyle yaparız.
Integer value = ...
if(map.containsKey(value)){...}
entrySet metodu
1. for döngüsü
Elimizde şöyle bir map olsun.
Map<Integer, Set<String>> map = new TreeMap<>();
Şöyle yaparız. Parametreler aynı olmalıdır.
for (Entry<Integer, Set<String>> e : map.entrySet()) {
  ...
}
2. Iterator
Elimizde şöyle bir map olsun.
Map<String, Integer> map = new TreeMap<>();
Iterator kullanmak istersek şöyle yaparız.
Iterator<Map.Entry<Integer,String>> it  = map.entrySet().iterator();
while (it.hasNext ()) {
  Map.Entry<Integer,String> pair = it.next();
  Integer key   = pair.getKey();
  String  value = pair.getValue();  ...
} 
3. stream
Elimizde şöyle bir map olsun
Map<Key, Value> map = ...;
Value ile arama yapmak istersek şöyle yaparız.
Set<Key> keys = map.entrySet().stream()
  .filter(entry -> entry.getValue() == value)
  .map(entry -> entry.getKey())
  .collect(Collectors.toSet());
firstEntry metodu
Şöyle yaparız.
Collectors.groupingBy(
    Foo::getVariableCount,
    TreeMap::new,
    Collectors.toList())
.firstEntry()
.getValue()
floorEntry metodu
Örnek ver

floorKey metodu
<= koşulunu sağlayan ilk key nesnesini döner. Eğer böyle bir nesne yoksa null döner. Bu metoda benzer bir şey C++'ta yok. std::map.upper_bound() büyüktür (>) koşulunu sağlayan nesneyi döner. std::map_lower_bound() ise büyük eşittir (>=) koşulunu sağlayan nesneyi döner
Örnek
Şöyle yaparız.
TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>();
map.put(10, 100);
map.put(20, 200);
map.put(30, 300);
map.put(40, 400);
map.put(50, 500);
map.put(60, 600);
map.put(70, 700);
map.put(80, 800);

System.out.println(map.floorKey(5));
System.out.println(map.floorKey(9));
System.out.println(map.floorKey(10));
System.out.println(map.floorKey(11));
System.out.println(map.floorKey(90));
Çıktı olarak şunu alırız.
null null 10 10 80
get metodu
Şöyle yaparız.
Integer value = map.get (1);
put metodu
İmzası şöyle
public V put (K key, V value);
Örnek
Şöyle yaparız.
Integer value = ...
map.put (value, 1);
Örnek
Eski değeri almak için şöyle yaparız. Eski değer null olabilir.
TreeMap<LicenseNumber,Car> map = new TreeMap<LicenseNumber,Car>();

Car carReturnVal = map.put("6CAL146","clubCar");
Örnek
Eğer Comparator karşılatırma sonucunu 0 yani eşit dönerse, ikinci defa put() çağrısı sonucu verilen yeni değer eski değer ile yer değiştirir. Şöyle yaparız.
TreeMap<String, String> treeMap = new TreeMap<>(new Comparator<String>() {
  public int compare(String o1, String o2) {
    return o1.toLowerCase().compareTo(o2.toLowerCase());
  }
});
treeMap.put("abc", "Element1");
treeMap.put("ABC", "Element2");
Çıktı olarak şunu alırız.
treeMap: {abc=Element2}
putAll metodu
Şöyle yaparız.
map.putAll (otherHashMap);



Hiç yorum yok:

Yorum Gönder