Set集合的功能和Collection是一致的。 HashSet:底層數據結構是哈希表,線程非同步。 HashSet保證元素唯一性:hashCode()和equals() 如果元素的hashCode值相同,才會判斷equals是否為true。 如果元素的hashCode值不同,不會調用equals。 ...
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()。