2011-04-27 73 views
2

「我」的代碼:如何獲取HashMap值的屬性?

public void iterateHashmap2() { 
    HashMap hashmap = this.media; 
    Iterator it = hashmap.keySet().iterator(); 
    while (it.hasNext()) 
    { 
     Object key = it.next(); 
     Object val = hashmap.get(key); 
      // doesn't work.. 
     System.out.println(val.getAttribute); 
    } 
} 

所以我的問題是,如何獲取屬性的值包含。值是我自己創建的類,它包含4個字符串和另一個我創建的類作爲屬性。 (我想要做的是迭代通過散列表,並將存儲在值中的屬性的字符串與輸入數據進行比較..所以我需要能夠訪問hashmap..hope的值中的屬性有道理..)

+0

我已經合併了你的兩個未註冊的帳戶。你現在可以編輯你的問題,並在答案下留下評論(請做,而不是發表評論作爲答案)。 – 2011-04-27 22:46:29

回答

3

您訪問值的地圖提供了一個關鍵:

// create a map 
Map<String, MyObject> map = new HashMap<String, MyObject>(); 
// store a value 
map.put("key", someObject); 
// retrieve a value 
MyObject someObject2 = map.get("key"); 

您還可以使用

  • map.keySet()檢索所有鍵
  • map.values()檢索所有值,不帶密鑰
  • map.entrySet()檢索所有映射。每個條目代表映射到一個值的一個鍵。

a)在我的代碼中,我使用了Java Generics,因爲這是至少5年的標準方法。 b)您應該考慮從Java Tutorial讀取The Map Interface

0
Object val = hashmap.get(key); 
      // doesn't work.. 
System.out.println(val.getAttribute()); 

這裏的問題是Java是靜態類型的,這意味着你將需要以訪問非對象的方法來投val。您需要將val作爲hashmap中的實際類型,因爲您不使用泛型。

MyClass val = (MyClass) hashmap.get(key);

0

嘗試改變這一行:

Object val = hashmap.get(key); 

這一行:

YourClass val = (YourClass) hashmap.get(key); 

既然你得到你的對象類型不能只叫你的類的方法,無需先澆鑄正確。

順便說一句,你應該認真考慮使用Java Generics

+0

你val仍然是Object,這不會有幫助。 – 2011-04-27 13:28:34

+0

是的,在你的評論之前就已經實現和修復了:) – anubhava 2011-04-27 13:29:46

0

您將需要一個強制轉換爲目標對象的類型。像:

YourObject val = (YourObject) hashmap.get(key); 

但...

  • 你的地圖應該是通用的像Map<KeyClass, ValueClass>
  • 有更好的方式來遍歷一個Map

例子:

for (Map.Entry<KeyClass, ValueClass> entry : map.entrySet()) { 
    KeyClass key = entry.getKey(); 
    ValueClass val = entry.getValue()); 
} 
0

如果你的問題是怎麼投的價值映射到HashMap中的密鑰爲什麼不使用泛型來實現這一點:

public void iterateHashmap2() { 
    HashMap<Object,YourClass> hashmap = this.media; 
    Iterator<YourClass> it = hashmap.keySet().iterator(); 
    while (it.hasNext()) 
    { 
     Object key = it.next(); 
     YourClass val = hashmap.get(key); 
      // if YourClass has a getAttribute() method then this will work 
     System.out.println(val.getAttribute()); 
    } 
} 

另外請注意,它總是好的做法,在接口層面上工作 - 所以這行:

HashMap<Object,YourClass> hashmap = this.media; 

應該

Map<Object,YourClass> hashmap = this.media; 
1

一):如果您正在使用JDK1.5 或更高,請使用通用和增強循環。該代碼會更簡單和更安全:

for(Map.Entry<Key, YourObj> entry: this.media.entrySet()){ 
    System.out.println(entry.getValue().getAttribute()); 
} 

B):如果你必須使用JDK1.4 下,你要投你的對象:((YourObj)val).getAttribute();