Set集合的功能和Collection是一致的。
HashSet:底层数据结构是哈希表,线程非同步。
HashSet保证元素唯一性:hashCode()和equals()
如果元素的hashCode值相同,才会判断equals是否为true。
如果元素的hashCode值不同,不会调用equals。
存人对象。同姓名同年龄,视为同一个人。
public class HashSetDemo {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person("a1",1));
hs.add(new Person("a2",2));
hs.add(new Person("a3",3));
hs.add(new Person("a2",2));
Iterator it = hs.iterator();
while (it.hasNext()){
Person p = (Person) it.next();
System.out.println(p.getName()+"**"+p.getAge());
}
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Person))
return false;
Person p = (Person) obj;
return this.getName().equals(p.name) && this.getAge() == p.age;
}
@Override
public int hashCode() {
return name.hashCode()+age*39;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode()和equals()。
来源:https://www.cnblogs.com/hongxiao2020/p/12639635.html