Giriş
TreeMap Sınıfının concurrent dünyaya uyarlanmış hali gibi düşünülebilir.
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
ÖrnekConcurrentSkipListMap is a thread-safe map and it will not through ConcurrentModificationException in recursive method while using computeIfAbsent().
Ş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)));}
Hiç yorum yok:
Yorum Gönder