Bonjour. Je recherche la structure de donnée la mieux adaptée pour rechercher une chaine de caractère parmi d'autres dans une collection. Mes chaines de caractères sont déjà triées selon l'ordre lexicographique, et je ne devrais ni insérer , ni supprimer de données. Je n'ai pas de doublons, donc un SET me semble être approprié. Un arbre me semblait etre le meilleur choix, jusqu'a ce que je lise que contains est effectué en temps constant pour un HashSet.
Pour moi temps constant signifie O(1). Je me trompe ?
Pour l'arbre, contains() est effectuée en log(n) , j'avais appris que c'était ce qui se faisait de mieux pour une recherche dans un ensemble.
Bref, je ne sais pas comment on peut avoir du temps constant pour recherche une chaine de caractère dans un HashSet... Et si on avait vraiment du temps constant quel serait l'intéret d'avoir un TreeSet par rapport au HashSet?
Bref, j'ai du manquer quelques chose là...
Ce que dit la FAQ collection, (traduite directement de la javadoc)
java.util.HashSet :
Le java.util.HashSet est la plus utile des implémentations.
Note : L'ordre d'itération des éléments est aléatoire.
Complexité : Les opérations add, remove, contains and size sont exécutées en un temps constant.
java.util.TreeSet :
Le java.util.TreeSet contient un ensemble d'éléments ordonnés (il implémente également l'interface java.util.SortedSet). Les éléments sont ordonnés en fonction de leur ordre naturel (voir java.util.Comparable), ou en fonction d'un java.util.Comparator précisé à la construction du TreeSet.
Complexité : Les opérations add, remove, contains and size sont exécutées en un temps log(n).
Partager