展开全部
可以得把多个字段封装成一个类,改写类的hashCode 和 equals方法就行。62616964757a686964616fe58685e5aeb931333337383962
比如 下面的代码p4和p1不是一个实例,可是Hashtable最后的大小还是3 p4因为和p1的参数相同所以把p1的值给覆盖了。import java.util.Hashtable;
public class TestHashTable {
public static void main(String[] args) {
Hashtable ht=new Hashtable();
Person p1=new Person("a",1,1,true);
Person p2=new Person("a",1,1,false);
Person p3=new Person("a",1,3,true);
ht.put(p1, p1);
ht.put(p2, p2);
ht.put(p3, p3);
System.out.println(ht.size());
Person p4=new Person("a",1,1,true);
ht.put(p4, p4);
System.out.println(p1==p4);
System.out.println(ht.size());
}
}
class Person{
private String name ;
private boolean sex=true;
private int age=0,weight=0;
public Person(String name,int age,int weight,boolean sex){
this.name=name;
this.age=age;
this.weight=weight;
this.sex=sex;
}
public int hashCode(){
return (name+String.valueOf(age)+String.valueOf(weight)+String.valueOf(sex)).hashCode();
}
public String toString(){
return name+String.valueOf(age)+String.valueOf(weight)+String.valueOf(sex);
}
public boolean equals(Object o){
if(o==null)
return false;
else
return this.toString().equals(o.toString());
}
}