2012-12-23 43 views
0

在Java中。我想存儲用戶定義的對象和與其相關的整數。我應該使用哪種數據類型? 我已經試過HashMap的,但顯然它不能存儲對象沒有equals()方法我可以使用哪種數據類型?

+2

好問題,使用狀況:請問您必須要與這些對象和做這個整數?根據給定的對象快速找到一個整數?根據整數快速找到對象?迭代對象 - 整數對?讓對象按關聯的整數排序? –

+6

'HashMap'絕對*可以*存儲不覆蓋equals/hashCode的對象...您將只獲取參考標識行爲。現在,你怎麼想要它的行爲呢? –

+1

爲什麼重寫'equals'和'hashCode'是一個問題? –

回答

2

我已經試過HashMap的,但顯然它不能存儲對象不 equals()方法

更準確地說,你不能用一個對象作爲地圖的關鍵,沒有滿足以下兩個條件之一的: -

  • 同時覆蓋equalshashcode,或
  • 忽略它們中的任何一個。

所以,你可以很容易地使用你的對象作爲關鍵,而不使用equals方法作爲第二個條件。

但是,如果您希望根據新創建的對象找到您的密鑰,最好遵循第一個條件。因爲equals方法的默認實現比較參考值的對象而不是內容本身。

+0

即使您重寫equals或hashcode,它也可以正常工作 –

+0

@ rai.skumar ..當然,就存儲對象而言,它可以正常工作。但你永遠不會再從Map中取回你的鑰匙。 –

+0

假設如果我只是覆蓋等於。在這種情況下,2個相同的對象可能被散列到不同的位置,但是當等於被覆蓋時,您將能夠恢復您的對象。 –

0

你應該堅持哈希映射。它適用於所有情況。

這是由用戶定義的一些類

public class UserDefinedObject(){ 
    } 

這裏是這個類與HashMap的

import java.util.HashMap; 
import java.util.Map; 

public class Main { 

    public static void main(String[] args) { 
     Map<UserDefinedObject, Integer> stuff = new HashMap<UserDefinedObject, Integer>(); 
     UserDefinedObject userDefinedObject = new UserDefinedObject(); 
     stuff.put(userDefinedObject, 1); 
     System.out.println(stuff.get(userDefinedObject)); 
    } 
} 
相關問題