Die Set-Schnittstelle erbt wie die List-Schnittstelle die Collection-Schnittstelle. Die Elemente in der Set-Schnittstelle sind ungeordnet und bestimmte Regeln werden verwendet, um sicherzustellen, dass die gespeicherten Elemente nicht wiederholt werden.
HashSet ist eine Implementierungsklasse der Set-Schnittstelle. Die gespeicherten Elemente sind nicht wiederholbar und die Elemente sind ungeordnet. Beim Hinzufügen eines Objekts zur HashSet-Sammlung wird zuerst der hashCode() des Objekts aufgerufen. )-Methode zur Berechnung des Hashwerts eines Objekts, um den Speicherort des Elements zu bestimmen. Wenn die Hash-Werte zu diesem Zeitpunkt gleich sind, rufen Sie die Methode equal() des Objekts auf, um sicherzustellen, dass an dieser Position keine doppelten Elemente vorhanden sind.
package 集合类; import java.util.HashSet; import java.util.Iterator; public class Set { public static void main(String[] args) { HashSet set=new HashSet(); set.add("hello"); set.add("world"); set.add("abc"); set.add("hello"); Iterator it=set.iterator(); while(it.hasNext()){ Object obj=it.next(); System.out.print(obj+ " "); } } }
Laufende Ergebnisse
Aus den laufenden Ergebnissen ist ersichtlich, dass die Reihenfolge des Entfernens von Elementen nicht mit der Reihenfolge des Hinzufügens von Elementen übereinstimmt und die wiederholten Zeichenfolgen entfernt und nur einmal hinzugefügt werden, da add( Rufen Sie zum Speichern eines Elements zunächst die hashCode()-Methode des aktuell gespeicherten Objekts auf, um den Hash-Wert des Objekts zu erhalten, und berechnen Sie dann einen Speicherort basierend auf dem Hash-Wert Wenn sich an dieser Position ein Element befindet, wird die Methode equal() aufgerufen, um das aktuell gespeicherte Element mit dem Element an dieser Position zu vergleichen. Wenn das Rückgabeergebnis falsch ist, wird das Element in der Sammlung gespeichert. Wenn das Rückgabeergebnis wahr ist, bedeutet dies, dass ein doppeltes Element vorhanden ist und das Element verworfen wird.
package 集合类; import java.util.HashSet; class Student{ String id; String name; public Student(String id,String name){ this.id=id; this.name=name; } public String toString(){ String s = id + ":" + name; return s; } } public class Set1 { public static void main(String[] args) { HashSet hs=new HashSet(); Student stu1=new Student("1","hello"); Student stu2=new Student("2","world"); Student stu3=new Student("1","hello"); hs.add(stu1); hs.add(stu2); hs.add(stu3); System.out.println(hs); } }
Laufergebnisse
Die doppelten Elemente werden nicht entfernt, da die Methoden hashCode() und equal() beim Definieren der Student-Klasse nicht überschrieben werden.
package API; import java.util.HashSet; class Student{ private String id; private String name; public Student(String id,String name){ this.id=id; this.name=name; } //重写toString方法 public String toString(){ return id+ ":"+name; } //重写hashCode方法 public int hashCode(){ //返回id属性的哈希值 return id.hashCode(); } public boolean equals(Object obj){ //判断是否是同一个对象 if(this==obj){ return true; } //判断对象是Student类型 if(!(obj instanceof Student)){ return false; } //将对象强转为Student类型 Student stu=(Student) obj; //判断id是否相同 boolean b=this.id.equals(stu.id); return b; } } public class Set2 { public static void main(String[] args) { HashSet hs=new HashSet(); Student stu1=new Student("1","hello"); Student stu2=new Student("2","world"); Student stu3=new Student("1","hello"); hs.add(stu1); hs.add(stu2); hs.add(stu3); System.out.println(hs); } }
Laufergebnisse
Weil die Student-Klasse die Methoden hashCode() und equal() der Object-Klasse überschreibt. Geben Sie den Hashwert des ID-Attributs in der Methode hashCode() zurück, vergleichen Sie die ID-Attribute der Objekte in der Methode equal() auf Gleichheit und geben Sie das Ergebnis zurück. Wenn die add()-Methode der HashSet-Sammlung aufgerufen wird, um das stu3-Objekt hinzuzufügen, wird festgestellt, dass sein Hashwert mit dem des stu2-Objekts übereinstimmt, und stu2.equals(stu3) gibt true zurück. HashSet stellt fest, dass die beiden Objekte identisch sind, sodass die doppelten Student-Objekte entfernt werden.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Set-Schnittstelle in Java, um Arrays ohne doppelte Elemente zu speichern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!