为什么hashmap总结了整数值

时间:2014-05-23 06:51:47

标签: java hashmap

我是从互联网示例中学习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说的那样完美地工作,我只是没有对结果给予足够的重视。此外,帖子可以删除,因为它不会询问任何有价值的信息。

1 个答案:

答案 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