Set<Integer> in = hm1.keySet();
Iterator<Integer> ite = in.iterator();
while(ite.hasNext()){
Integer inte =ite.next();
System.out.println(inte+"---"+hm1.get(inte));
//这里打印
//1---d
//2---b
//3---c
//这里重复key对应的value被覆盖了
}
}
}作者: 丰亚彬 时间: 2012-6-2 17:17
视频上老师讲过了,你自定义的类如果存放到HashMap中要根据键的类型重写hashCode方法和equals方法,这样才能进行对比的作者: 黑马—陈磊 时间: 2012-6-2 17:20
你可以做个这样的小测试:
public class T {
public static void main(String[] args) {
Zi A1=new Zi("aa",1);
Zi A2=new Zi("aa",1);
System.out.print(A1==A2);
}
输出结果为false;说明两次new的是两个不同的对象,他们指向的不是同一个对象。
所以put方法中key值没有重复 ,对应的value的也不会被覆盖。作者: 胡团乐 时间: 2012-6-2 18:46
在Zi类里复写hashcode 和equals方法就好了
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Zi other = (Zi) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}