簡體   English   中英

Java HashMap對象,整數

[英]Java HashMap Object, Integer

我有以下地圖:

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;
    }

現在,我有了一張充滿值的地圖,我需要尋找一個特定的鍵,例如:“ London,Paris”。 我的主要方法是:

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

由於某種原因,它給了我

線程“主”中的異常java.lang.NullPointerException

而且我幾乎可以肯定我不能這樣做。

City類實現hashCodeequals方法,否則為map.get(new City("London", "Paris")); 將始終返回null

當您嘗試使用結果時,您可能會得到nullpointer。 為此,您還需要實現city的equals和hashcode方法。

如果要在哈希映射中使用您的類,則需要重寫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

關於為什么您可能會遇到NullPointerException的原因有兩個:

  • 您的地圖為空。 因此,當您執行map.get() ,會引發異常
  • 由於尚未覆蓋equals()hashCode()方法,因此在執行get() ,映射不會返回正確的對象,而是返回null。 當您嘗試使用此方法時,您會得到例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM