1.HashSet存储自定义对象并遍历
源码实现:
HashSet的add()方法,首先会使用当前集合中的每一个元素和新添加的元素进行hash值比较,
如果hash值不一样,则直接添加
如果hash值一样,比较地址值或者使用equals方法进行比较
比较结果一样,则认为是重复不添加
所有的比较结果都不一样则添加
demo示例:
public class App {
public static void main( String[] args )
{
HashSet<Dog> dogSet=new HashSet<Dog>();
Dog xiaoDog=new Dog("哮天犬",10);
Dog xiaoDo2=new Dog("狗带",18);
Dog xiaoDo3=new Dog("狗带",18);
dogSet.add(xiaoDog);
dogSet.add(xiaoDo2);
dogSet.add(xiaoDo3);
for (Dog dog:dogSet) {
System.out.println(dog);
}
}
}
class Dog {
String name;
int age;
public Dog(String name,int age){
this.name=name;
this.age=age;
}
@Override
public boolean equals(Object obj){//2.重写比较方法
System.out.println("====================");
Dog dog=(Dog)obj;
if (this.name!=dog.name){
return false;
}
if (this.age!=dog.age){
return false;
}
return true;//默认返回true
}
@Override
public int hashCode() {//1.重写方法返回相同的值
return 1;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行结果:
====================
====================
====================
Dog{name='哮天犬', age=10}
Dog{name='狗带', age=18}