Home >Java >javaTutorial >How to use Set interface in Java to store arrays without duplicate elements
The Set interface, like the List interface, inherits the Collection interface. The elements in the Set interface are unordered, and certain rules are used to ensure that the stored elements are not repeated.
HashSet is an implementation class of the Set interface. The stored elements are non-repeatable, and the elements are unordered. When an object is added to the HashSet collection, First, the hashCode() method of the object is called to calculate the hash value of the object to determine the storage location of the element. If the hash values are the same at this time, call the equals() method of the object to ensure that there are no duplicate elements at this position.
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+ " "); } } }
Running results
## It can be seen from the running results that the order of removing elements is not consistent with the order of adding elements, and repeated strings are removed , it is only added once because when the add() method of the HashSet collection stores an element, it first calls the hashCode() method of the currently stored object to obtain the hash value of the object, and then calculates a storage location based on the hash value. If If there is no element at this position, the element will be stored directly. If there is an element at this position, the equal() method will be called to compare the currently stored element with the element at this position. If the return result is false, the element will be stored in the collection. If the return result is true, it means there is a duplicate element and the element will be discarded.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); } }Running results
The reason why duplicate elements are not removed is because the hashCode() and equals() methods were not overridden when defining the Student class.
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); } }Running results Because the Student class overrides the hashCode() and equals() methods of the Object class. Return the hash value of the id attribute in the hashCode() method, compare whether the id attributes of the objects are equal in the equals() method, and return the result. When the add() method of the HashSet collection is called to add the stu3 object, it is found that its hash value is the same as the stu2 object, and stu2.equals(stu3) returns true. HashSet determines that the two objects are the same, so the duplicate Student objects are removed.
The above is the detailed content of How to use Set interface in Java to store arrays without duplicate elements. For more information, please follow other related articles on the PHP Chinese website!