ConcurrentSkipListMap etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ConcurrentSkipListMap etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

25 Aralık 2016 Pazar

ConcurrentSkipListMap Sınıfı

Giriş
TreeMap Sınıfının concurrent dünyaya uyarlanmış hali gibi düşünülebilir.

ConcurrentSkipListMap aynı zamanda bir ConcurrentNavigableMap ve NavigableMap. 

Kendi içinde red-black tree yerine skip list kullanıyor. QT dokümantasyonunda QMap'in de skip list kullandığı yazılı. why does qmap uses skiplist instead ob rb-tree? sorusunda da konuyla ilgili bilgi var. Sebep olarak ise
skip-lists result in less code in the executable and require less memory per node.
yazılmış. 

ceilingEntry metodu
When should I use ConcurrentSkipListMap? sorusunda ise ConcurrentSkipListMap'in ConcurrentHashMap'e göre ekle/çıkar/al işlemlerinde biraz daha yavaş olabileceği ancak elemanları sıralı tutması ve ceilingEntry(), ceilingKey() metodlar sunduğu için sıralı erişimin gerektiği yerlerde daha hızlı olduğu söylenmiş.

computeIfAbsent metodu
Açıklaması şöyle
ConcurrentSkipListMap is a thread-safe map and it will not through ConcurrentModificationException in recursive method while using computeIfAbsent().
Örnek
Şu kod ConcurrentModificationException fırlatmaz. Şöyle yaparız. Ama HashMap kullansaydık exception fırlatılırdı
Map<Integer, BigInteger> cache = new ConcurrentSkipListMap<>(
          Map.of(0, BigInteger.ZERO, 1, BigInteger.ONE)
);
public BigInteger fibonacci(int n) {
  return cache.computeIfAbsent(n,
    key -> fibonacci(key - 1).add(fibonacci(key - 2)));
}