public int hashCode(){
//zhangsan,20 = 100+20*2 =40 = 140
//lisi 22 = 98 + 22*2 =44 = 142
//age*数,降低姓名年龄不一致的时候,而哈希值恰巧一致的概率
final int X = 3;
return this.name.hashCode()+age * X ;
}
public boolean equals(Object obj){
if (this == obj)
return true;
if( obj instanceof Person){
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age ;
}
return false;
}
3. TreeSet二叉树TreeSet具有排序功能的一个集合 * 底层数据结果是二叉树 * 排序的依据是对象的自然顺序 保证元素唯一性的依据: compareTo方法return 0.(return 1 原顺序 -1倒序) 一个对象是否具有自然顺序,看描述对象的这个类,是否实现了Comparable接口,覆盖接口中的抽象方法 public int compareTo(){} * 字符串本身具备自然顺序,是因为String类实现了Comparable接口,覆盖了compareTo方法 TreeSet集合排序有两种方式,Comparable和Comparator区别:1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。2: 让集合自身具备比较性,自定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。TreeSet ts = new TreeSet(new MyCompara()); 第二种方式较为灵活。 第一种 实现Comparable接口:
public class Person implements Comparable{
//compareTo方法,建立Person类的比较性的
//既然有比较,就是两个对象才能比较
// this 和 o比
public int compareTo(Object o){
//比较对象中的姓名和年龄
//name姓名是主要的条件,如果this.name 和o.name比较后,如果不是0
//此时,没有比较比较年龄了,当姓名的比较结果是0的时候,比较年龄
Person p = (Person)o;
//this中的name和 p中的name怎么比较,结果才是int类型
int num = this.name.compareTo(p.name);
return num==0?this.age -p.age:num; //三元运算
}
}