HashMaps遍历的HashMap

时间:2010-12-01 18:35:55

标签: java recursion hashmap traversal

在Java中,我正在尝试检索具有以下对象的HashMap<String, Object>HashMap<String, Object>

我实现了一个递归函数,它返回给定键找到的HashMap<String, Object>,如果找不到键,则返回null

这是功能:

public static HashMap<String, Object> getHashMap(HashMap<String, 
                                      Object> map, String key)
{
    for (Map.Entry<String, Object> entry : map.entrySet()) {
     if (entry.getValue().getClass().getName() == "java.util.HashMap") {
         if (entry.getKey() == key) 
          return (HashMap<String, Object>) entry.getValue();
         return getHashMap((HashMap<String, Object>) entry.getValue(), key);
     }
    }
    return null;
}

它仅适用于第一项。如何遍历HashMaps的Hashmap?什么是更好的方法?

3 个答案:

答案 0 :(得分:1)

首先,不要将==用于字符串。而是使用equals方法。

另一方面,我更喜欢像if (myObject instanceof java.util.Map) { ... }这样的实例,这样如果您以后决定更改地图,则地图不一定是HashMap。

答案 1 :(得分:1)

而不是立即返回值:

return getHashMap((HashMap<String, Object>) entry.getValue(), key);

您要首先检查它是否不是null,然后才返回。否则你应该继续搜索:

HashMap<String, Object> result = getHashMap((HashMap<String, Object>) entry.getValue(), key);
if (result != null)
  return result;

答案 2 :(得分:0)

另一种方法。尝试使用HashMap<String, HashMap<String, Object>> main作为“外部”HashMap,然后搜索key

Object value = main.get(key);
if (value == null) {
    for (HashMap<String, Object> inner : main.values()) {
        value = inner.get(key);
        if (value != null) {
            break;
        }
    }
}