HashSet 元素是无序的不可重复。
HashSet是通过元素的两个方法hashCode()和equals()来保证元素的唯一性
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的HashCode值不同,不会调用equals。
package com.mytest;
import java.util.HashSet;
import java.util.Iterator;
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
// 重写hashCode
public int hashCode() {
// 姓名和年龄的哈希值不同 就不用调用equals 提高效率
return name.hashCode() + age * 23;
}
// 重写equals
public boolean equals(Object obj) {
// 同一个对象放两次就直接返回true
if (this == obj)
return true;
// 判断是不是Person类型
if (!(obj instanceof Person))
return false;
Person p = (Person) obj;
// 姓名和年龄都相同视为重复
return this.name.equals(p.name) && this.age == p.age;
}
}
public class test02 {
public static void main(String[] args) {
HashSet hashSet = new HashSet();
hashSet.add(new Person("lili1", 11));
hashSet.add(new Person("lili2", 12));
hashSet.add(new Person("lili3", 13));
hashSet.add(new Person("lili1", 11));
Iterator it = hashSet.iterator();
while (it.hasNext()) {
Person person = (Person) it.next();
System.out.println(person.getName() + "________" + person.getAge());
}
}
} |
|