2011-04-27 110 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();