请大家先看一段程序:import java.util.*;
class HashMap1
{
public static void main(String[] args)
{
Student s1=new Student();
Student s2=new Student();
s1.setName("lisi");
s2.setName("lisi");
s1.setAge(11);
s2.setAge(11);
HashMap<Integer,Student> hm=new HashMap<Integer,Student>();
hm.put(1,s1);
hm.put(2,s2);
HashMap<Student,Integer> hm1=new HashMap<Student,Integer>();
hm1.put(s1,1);
hm1.put(s2,2);
System.out.println("hm的长度:"+hm.size());
System.out.println("hm1的长度:"+hm1.size());
}
}
class Student
{
private String name;
private int age;
public int hashCode()
{
return name.hashCode()+age*11;
}
public boolean equals(Object obj)
{
Student s=(Student)obj;
return this.name.equals(s.name)&&this.age==s.age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public String toString()
{
return name+"---"+age;
}
}
输出结果:
通过结果我们可以知道 hashmap在存储时 底层Hash表比较的是键值是否相同, 而不去比较value的值,
现在想比较value的值而不去比较键值(其他什么都不动,让hashMap集合存入数据时保健的是value的值是否相同,也就是在程序中 输出时也让hm的长度为1)
请大神指点!!
|
|