J'ai quelques questions concernant Java.util.concurrent
paquet:
Pourquoi dans l'API Java API il y a le non-concurrent TreeMap d'un côté et le concurrent ConcurrentSkipListMap de l'autre?
Pourquoi ne l'ont-ils pas appelé ConcurrentTreeMap
? Est-il sûr de dire qu'un SkipListMap
inclut un TreeMap
?
Par exemple, un HashMap
non simultané a son homologue simultané ConcurrentHashMap
. Pourquoi cela ne se produit-il pas pour le TreeMap
?
Pourquoi y a-t-il le TreeMap non simultané d'un côté et le ConcurrentSkipListMap de l'autre?
Je soupçonne que cela a été fait car la création simultanée d'une arborescence était trop difficile ou souffrait de problèmes de performances de verrouillage. En termes de collections ordonnées, les SkipLists sont des structures de données très simples et fournissent un comportement et des performances similaires aux arbres, de sorte que ConcurrentSkipListMap
(et Set
) aurait pu être plus facile à créer concurrent.
Je suis en fait plus déçu qu'il n'y ait pas de collection SkipList non simultanée moi-même.
Est-il sûr de dire qu'un SkipListMap comprenait un TreeMap?
Non. Il est sûr de dire qu'une SkipList offre des fonctionnalités similaires en termes de collection ordonnée d'éléments qui donne à O(logN)
des performances pour rechercher, insérer, supprimer, etc. Au moins, cela donne une approximation probabiliste de cette performance.
Voici une bonne page sur les skiplists . Ce sont des structures de données extrêmement cool. Je ne peux qu'espérer qu'ils sont enseignés dans les classes de structures de données de programmation modernes.
La classe TreeMap
est appelée ainsi car elle est implémentée à l'aide d'un arbre de recherche équilibré . Le ConcurrentSkipListMap
est appelé de cette façon car il est implémenté en utilisant un sauter la liste . Pourquoi n'y a-t-il pas de version simultanée de TreeMap
? Peut-être parce qu'il est difficile de créer une arborescence qui évolue à des niveaux élevés de concurrence; une liste de sauts simultanés est plus facile à implémenter correctement.