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