Java HashMap对象,整数

时间:2012-11-07 16:02:09

标签: java class integer hashmap

我有以下地图:

Map<City, Integer> map = getMap();

和我的班级城市:

public class City {
    private String c1;
    private String c2;

    public City(String c1, String c2){
        this.c1 = c1;
        this.c2 = c2;
    }

现在我有一个充满价值的地图,我需要寻找一个特定的密钥,例如:“伦敦,巴黎”。我的主要方法是这一个:

map.get(new City("London", "Paris"));

出于某种原因,它正在给我

  

线程“main”中的异常java.lang.NullPointerException

我几乎可以肯定我不能这样做。

4 个答案:

答案 0 :(得分:2)

hashCode课程实施equalsCity方法,否则map.get(new City("London", "Paris"));将始终返回null

答案 1 :(得分:1)

当您尝试使用结果时,您可能正在获取nullpointer。为此,您还需要实现city的equals和hashcode方法。

答案 2 :(得分:0)

如果您要在哈希映射中使用您的类,则需要覆盖hashCodeequals

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((c1 == null) ? 0 : c1.hashCode());
        result = prime * result + ((c2 == null) ? 0 : c2.hashCode());
        return result;
    }

平等的实施应该是微不足道的。

您的代码失败,因为您没有为编译器定义如何比较两个City对象。您可以通过覆盖equals函数来定义比较规则。每当您覆盖equals函数时,您还应该覆盖hashCode函数。哈希映射使用hashCode函数以有意义和最佳的方式存储键 - 值对。在哈希映射中执行查找时也会使用hashCode函数。

您可以在以下文章中找到有关这些语义的更多丰富且更准确的信息:http://www.ibm.com/developerworks/java/library/j-jtp05273/index.html

答案 3 :(得分:0)

有几个原因可能会导致您遇到NullPointerException:

  • 您的地图为空。因此,当您执行map.get()时,它会抛出异常
  • 由于您没有覆盖equals()hashCode()方法,因此当您执行get()时,地图不会返回正确的对象,而是返回null。当你尝试使用它时,你会得到例外。