结果为
会发现这里成功的去重了,元素是唯一且无序的
2. 集合添加的元素是自定义对象时
那么再来看看将自定义对象传入Set集合会怎么样
import java.util.HashSet;
public class demo2 {
public static void main(String[] args) {
HashSet set = new HashSet<>();
Student s1 = new Student(“zhang”,12);
Student s2 = new Student(“chen”,20);
Student s3 = new Student(“cao”,60);
Student s4 = new Student(“zhang”,12);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
for(Student s : set){
System.out.println(s.getName()+“—”+s.getAge());
}
}
}
package review.SetDemo;
import java.util.HashSet;
public class demo2 {
public static void main(String[] args) {
HashSet set = new HashSet<>();
Student s1 = new Student(“zhang”,12);
Student s2 = new Student(“chen”,20);
Student s3 = new Student(“cao”,60);
Student s4 = new Student(“zhang”,12);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
for(Student s : set){
System.out.println(s.getName()+“—”+s.getAge());
}
}
}
结果为
发现并没有去重,Student类的对象s1和s4是一样的属性值,但是都添加到了Set集合中,这就发生了错误
查看相关的源码
那么,就要来说一说Set集合的去重原理了
查看源码我们可以发现,HashSet其实是调用了map集合中的put方法来保证元素不会重复
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
再点进去查看put方法
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
会发现这里面又调用了putVal方法和hash