首先创建一个Person类,实现equals,hashCode和compareTo方法
public class Person implements Comparable<Person> {
private String name;
private int age;
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;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if (!(obj instanceof Person))
throw new ClassCastException("类型不匹配");
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
public int hashCode() {
return name.hashCode() + age;
}
/**
* positive integer greater than
* 0 equal
* negative integer less than
*
* @param person
* @return
*/
public int compareTo(Person person) {
int num = new Integer(this.age).compareTo(new Integer(person.age));
// 年龄相同再比较姓名
if (num == 0)
return this.name.compareTo(person.name);
return num;
}
}
import java.util.HashSet;
import java.util.Iterator;
/**
* 使用HashSet集合实现添加对象(不重复)
* HashSet底层是使用了HashCode和equals方法比较是否相等
* 如果hashcode值不同,不会调用equals
* Created by Administrator on 2017/2/26 0026.
*/
public class HashSetPerson {
public static void main(String[]args){
HashSet<Person> hashSet = new HashSet<Person>();
hashSet.add(new Person("a1",20));
hashSet.add(new Person("a2",22));
hashSet.add(new Person("a3",24));
hashSet.add(new Person("a4",18));
hashSet.add(new Person("a2",22));
for (Iterator it = hashSet.iterator();it.hasNext();){
Object obj = it.next();
Person p = (Person)obj;
System.out.println("name:"+p.getName()+"\tage:"+p.getAge());
}
}
}
运行结果
name:a1 age:20
name:a4 age:18
name:a2 age:22
name:a3 age:24