Pourquoi n'avons-nous pas obtenir la séquence ordonnée dans HashSet
Je suis en utilisant le HashSet
pour l'ajout d'éléments et de les récupérer, je sais que je ne vais pas récupérer les données dans l'ordre dans lequel j'ai ajouté, mais je veux savoir la raison exacte pourquoi Est-il happeing?
import java.util.HashSet;
import java.util.Iterator;
public class HS {
public static void main(String args[]) {
HashSet h=new HashSet();
h.add("Mayank");
h.add("Mayank");
h.add("Vashist");
h.add("Dinesh");
h.add("Vashist");
Iterator itr=h.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
}
}
}
OriginalL'auteur Make | 2013-06-01
Vous devez vous connecter pour publier un commentaire.
Ce n'est que le contrat pour un
Set
en java, à partir de la javadocAfin de renvoyer les valeurs dans l'ordre, la
Set
besoins du maintien de l'ordre. Cela a un coût pour la vitesse et de l'espace.Un
LinkedHashSet
maintient l'ordre d'insertion.OriginalL'auteur Boris the Spider
HashSet ne permet pas de conserver l'élément ajout de la commande. D'abord, il calcule le code de hachage de l'objet qui doit rester constante, mais est difficile à prédire, puis l'utilise pour sélectionner un seau qui est une liste d'objets qui ont eu le même seau sélectionné. Comme un
Iterator
juste itère sur tous les segments, l'itération de l'ordre est en grande partie imprévisibles.Utilisation LinkedHashSet à la place si vous avez besoin de préserver l'ordre. Cependant
LinkedHashSet
maintient supplémentaires liés liste donc besoin de plus de ressources.OriginalL'auteur h22
Parce que dans HashSet il y a une valeur de hachage calculée, pour chaque objet, et cette valeur de hachage détermine l'index du tableau de l'objet particulier dans le conteneur. Donc, l'ordre des éléments insérés sont naturellement pas conservé.
Cela permet d'accéder aux éléments souhaités avec O(1) de la complexité, mais il coûte beaucoup de mémoire.
http://en.wikipedia.org/wiki/Hash_table
OriginalL'auteur Grzegorz Piwowarek
Un
HashSet
utilise ce qui est appelé un table de hachage pour stocker des éléments.Une table de hachage est composé de plusieurs "machines à sous" dans lesquelles vos articles sont mis. Décider de ce créneau pour mettre un élément en est déterminé par l'élément de code de hachage qui n'a généralement pas de relation à l'ordre naturel de l'élément.
Un
TreeSet
, d'autre part, les magasins éléments en fonction de leur ordre naturel, qui permet à un dans l'ordre de la traversée de son contenu. Cette commande est basé sur l'ordre naturel des objets et non de l'ordre dans lequel ils ont été insérés. Une autre différence entre unTreeSet
etHashSet
est qu'unHashSet
fournit O(1) recherche, d'insertion et de suppression de où comme unTreeSet
fournitO(log(n))
recherche, d'insertion et de suppression.Un LinkedHashSet maintient l'ordre d'insertion des éléments, par la construction de liens entre les éléments, car ils sont insérés.
OriginalL'auteur Matt Crinklaw-Vogt
À partir de la documentation officielle:
OriginalL'auteur Juned Ahsan
Ici est la version commandée:
OriginalL'auteur Dmitry Gapkalov