L'éditeur suivant vous proposera un article Core Java pour parler brièvement de HashSet (recommandé). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil
Lorsque les étudiants liront cette question, je poserai d'abord deux questions, et vous comprendrez ensuite mieux en lisant cet article avec des questions.
1. Pourquoi HashSet ne peut-il pas ajouter d'éléments en double lors de l'ajout d'éléments ?
2. HashSet ajoute-t-il des éléments nuls ?
Ouvrez le code source, nous voyons le code suivant, nous voyons que HashSet a également un HashMap comme attribut, et la méthode de construction de HashSet() consiste à instancier cette carte. Si vous ne connaissez pas HashMap, vous pouvez lire mon article de blog. Notez également qu’il existe un objet final statique PRESENT. A quoi sert-il ? Continuons la lecture.
private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<>(); }
Ensuite, nous ouvrons sa méthode add, qui consiste à mettre l'élément e dans le HashMap, puis à y mettre l'objet final statique PRESENT comme valeur If. vous ajoutez Si cela réussit, alors HashMap renvoie null, puis l'ajout est réussi. Cela a également été mentionné dans le billet de blog précédent. Parlons-en à nouveau sous forme de critique. Si l'élément est placé dans un HashMap, son hashCode est d'abord jugé. Si le hashCode n'est pas trouvé, l'index est calculé en fonction du hashCode et placé dans le compartiment correspondant. Si le hashCode est le même, alors le deuxième jugement est basé. si la clé est égale et placée dans le compartiment correspondant, elle se trouve dans la liste chaînée.
/** * Adds the specified element to this set if it is not already present. * More formally, adds the specified element <tt>e</tt> to this set if * this set contains no element <tt>e2</tt> such that * <tt>(e==null ? e2==null : e.equals(e2))</tt>. * If this set already contains the element, the call leaves the set * unchanged and returns <tt>false</tt>. * * @param e element to be added to this set * @return <tt>true</tt> if this set did not already contain the specified * element */ public boolean add(E e) { return map.put(e, PRESENT)==null;
Bien sûr, les étudiants ont également pensé à la deuxième question, car hashMap prend en charge la clé nulle, donc HashSet peut également ajouter des éléments avec une clé nulle. HashMap est utilisé dans de nombreux endroits. Savez-vous à quel point c'est important ? !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!