我是从互联网示例中学习HashMap
,我无法理解为什么put()
总结整数值而不是替换它们?我已尝试使用字符串,它确实取代了应有的字符串。
Javadoc说:
将指定的值与此映射中的指定键相关联。 如果地图以前包含该键的映射,则替换旧值。
然而:
public class testMap {
public static void main(String[] args) {
HashMap<Dog, Integer> myH = new HashMap<>();
Dog d1 = new Dog("white");
Dog d2 = new Dog("green");
Dog d3 = new Dog("purple");
Dog d4 = new Dog("white");
Dog d5 = new Dog("green");
Dog d6 = new Dog("white");
Dog d7 = new Dog("white");
myH.put(d1, 10);
myH.put(d2, 20);
myH.put(d3, 30);
myH.put(d4, 14);
myH.put(d5, 15);
myH.put(d6, 60);
myH.put(d7, 10);
System.out.println(myH.size());
for (Entry<Dog,Integer> line : myH.entrySet() ) {
System.out.println(line.getKey().toString()+" - "+line.getValue());
}
}
}
class Dog {
String color;
Dog(String c){
color = c;
}
@Override
public String toString() {
return color + " dog" ;
}
@Override
public boolean equals(Object o) {
return ((Dog) o).color == this.color;
}
@Override
public int hashCode() {
return color.length();
}
}
我撤回了这个问题。它像javadoc说的那样完美地工作,我只是没有对结果给予足够的重视。此外,帖子可以删除,因为它不会询问任何有价值的信息。
答案 0 :(得分:1)
对于字符串相等性检查,请始终使用equals()。 在这种情况下,==
即可。
@Override
public boolean equals(Object o) {
return ((Dog) o).color.equals(this.color);
}
顺便说一下
3
green dog - 15
white dog - 10
purple dog - 30