28 Nisan 2020 Salı

ConcurrentSkipListSet Sınıfı - TreeSet Gibi Sıralıdır

Giriş
Açıklaması şöyle. Yani ConcurrentSkipListSet  aslında TreeSet gibidir.
Java Collection Framework have ConcurrentSkipListMap and ConcurrentSkipListSet which are concurrent replacement for TreeMap and TreeSet. These classes implement SortedMap and SortedSet interface respectively.
TreeSetSet Yerine List İstersek
Eğer bu sınıf yerine bir List kullanmak istersek sanırım en uygun olanı ConcurrentLinkedQueue olur

Ne Avantaj Getirir
Açıklaması şöyle. Getirdiği en büyük avantaj yazma işlemi yapılırken bir kısım reader'ların halen okumaya devam edebilmesi.
A ConcurrentSkipListSet uses the Skip List data structure and so can be updated and iterated by multiple threads concurrently without breaking without using locks. It is therefore much faster than implementing a locking regime on an ordinary Set.
SkipList Data Fazla Bellek Kullanır
SkipList'in nasıl çalıştığını gösteren bir yazı burada. Yani SkipList normal LinkedList'e göre daha fazla bellek kullanıyor. Sebebi ise balanced binary tree yapısını bir liste şeklinde tutması.

constructor
Set'e eklenecek nesnelerin Comparable arayüzünü gerçekleştirmesi gerekir.

constructor - Comparator
Comparator sayesinde nesnelerin denk olup olmadığı anlaşılır. Eğer denk değilse sıralama işlemi için yine Comparator'ın döndürdüğü değer kullanılır.
Örnek
Şöyle yaparız
ConcurrentSkipListSet<Emp> set = new ConcurrentSkipListSet(new Comparator<Emp>(){

  @Override
  public int compare(Emp o1, Emp o2) {
    ...
  }
});
Örnek
Şöyle yaparız
Set<Emp> set = new ConcurrentSkipListSet(Comparator.comparing(e -> e.empid));
add metodu
Örnek ver.

addAll metodu
Örnek ver.

iterator metodu
Açıklaması şöyle. SynchronizedRandomAccessList sınıfında olduğu gibi veriyapısını kilitlemeye gerek kalmaz.
Iterators are weakly consistent, returning elements reflecting the state of the set at some point at or since the creation of the iterator. They do not throw ConcurrentModificationException, and may proceed concurrently with other operations.
Örnek
Şöyle yaparız.
for(Foo foo : fooSet) {
  //do stuff
}
remove metodu
Örnek ver.

removeAll metodu
Örnek ver.



Hiç yorum yok:

Yorum Gönder