如何获取HashMap值的属性?

时间:2011-04-27 13:19:25

标签: java attributes 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并将存储在值中的属性的String与输入数据进行比较..所以我需要能够访问hashmap的值中的属性.hope使得感..)

6 个答案:

答案 0 :(得分:5)

您可以通过提供密钥来访问地图中的值:

// 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)您应该考虑从The Map Interface阅读Java Tutorial

答案 1 :(得分:1)

a):如果您使用 JDK1.5 或更高版本,请使用通用和增强型循环。代码将更简单,更安全:

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

b):如果您必须使用 JDK1.4 或更低版本,则必须投射您的对象:((YourObj)val).getAttribute();

答案 2 :(得分:0)

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

这里的问题是Java是静态类型的,这意味着您需要转换val才能访问非Object方法。您需要将val转换为hashmap中的实际类型,因为您没有使用泛型。

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

答案 3 :(得分:0)

尝试更改此行:

Object val = hashmap.get(key);

到这一行:

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

由于您获得的是Object类型,因此无需先调用类的方法就可以调用类的方法。

顺便说一句,你应该认真考虑使用Java Generics

答案 4 :(得分: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());
} 

答案 5 :(得分: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;