2015-11-01 39 views
0

我使用的處理語言(從Java PApplet派生)3.01版HashMap不能使用用戶定義鍵類工作

這裏是我的代碼...

Pig a = new Pig(1); 
    Pig b = new Pig(1); 
    HashMap<Pig, String> m = new HashMap<Pig, String>(); 
    m.put(a,"foo"); 
    String c = m.get(b); 
    println(c); 

class Pig { 
    int a; 
    Pig(int x) { a=x;} 
    boolean equals(Pig b) { return b.a==a;} 
    int hashCode() { return a;} 
} 

正如你看到的我是使用Pig作爲key,我定義了equals和hashCode。我期望輸出「foo」,但是,我得到的輸出爲空。

任何想法這裏發生了什麼?爲什麼這不起作用?

+0

您還沒有添加'B'到HashMap中。因此,即使HashMap中有另一個對象,'equals'方法返回true,您也無法檢索它。 – hotzst

+0

您沒有覆蓋等於。 –

+0

@hotzst:這正是他想要做的,得到「foo」沒有加b,因爲a和b應該被認爲是等於。 –

回答

1

嘗試,你沒有覆蓋對象方法都/正確:

class Pig { 
    int a; 

    Pig(int x) { 
     a = x; 
    } 

    @Override 
    public boolean equals(Object b) { 
     if(b == null) return false; 
     if(!(b instanceof Pig)) return false; 
     if(b == this) return true; 
     return ((Pig) b).a == a; 
    } 

    @Override 
    public int hashCode() { 
     return a; 
    } 
    } 
+1

哇覆蓋等於必須處理很多情況。我沒有想到他們全部。謝謝。 –

1

您沒有覆蓋equals(Object),但您確實實施了不相關的equals(Pig)方法。 HashMap使用前者,你的方法甚至沒有被調用。