使用字符串键管理嵌套映射

时间:2012-05-10 20:12:03

标签: java map iterator hashmap

nestedMap方法中创建nestedMap时,我可以访问迭代器中的put(),如下所示:

@Override
public String put(final String row, final String column, final String value) {
    /**
     * Second map which is contained by centralMap, that contain Strings as
     * Keys and Values.
     */
    Map<String, String> nestedMap;

    if (centralMap.containsKey(row))
        nestedMap = centralMap.get(row);
    else
        nestedMap = new HashMap<String, String>();
    if (!nestedMap.containsKey(column))
        counter++;
    centralMap.put(row, nestedMap);
    return nestedMap.put(column, value);
}

并将centralMap声明为Object-Variable,

private final Map<String, Map<String, String>> centralMap;

但仅在构造函数中实例化,如下所示:

centralMap = new HashMap<String, Map<String, String>>();

我想要实现的方法是删除方法:

@Override
    public void remove() {
        for (Map<String, String> map : centralMap.values()) {
            map = centralMap.get(keyName);
            iteratorNested.remove();
            if (map.size() <= 0)
                iteratorCentral.remove();
        }
    }

非常感谢!

1 个答案:

答案 0 :(得分:0)

不确定你究竟在问什么,但我认为这更容易理解:

@Override
public String put(final String row, final String column, final String value) {
    /**
     * Second map which is contained by centralMap, that contain Strings as
     * Keys and Values.
     */
    Map<String, String> nestedMap = centralMap.get(row);
    if (nestedMap == null) {
      nestedMap = new HashMap<String, String>();
      centralMap.put(row,nestedMap);
    }

    if (!nestedMap.containsKey(column))
        counter++;
    centralMap.put(row, nestedMap);
    return nestedMap.put(column, value);
}

我不太明白你在第二节中做了什么,所以无法帮助你改进。我没有看到你问题中提到的迭代器。

你让我猜,但你的程序中可能是ELSEWHERE(它会真正帮助你看到更多代码,以及你正在寻找的特定函数原型或行为声明)你希望能够遍历内容centralMap实例和nestedMap的嵌套实例。是的,你可以。

public void iterateOverAllNested()
{
   for (Map.Entry<String,Map<String,String>> nested : centralMap) {
     final String centralKey = nested.key();
     final Map<String,String> nestedMap = nested.value();
     System.out.println("Central map row/column: "+centralKey);
     for (Map.Entry<String,String> entry : nestedMap) {
       System.out.println(" key="+entry.key()+", value="+entry.value());
     }
   }
}

注意这闻起来。无类型String的嵌套映射可能是错误的。你最近有没有机会写Perl?我建议你写第二个问题,询问有关特定问题的良好数据结构。您可以将此代码作为起始位置,人们可能会提供更清晰的解决方案。