1

我想知道如何在二维 HashMap 中进行迭代?我正在创建一个 Object TrueStringMap2D,它执行以下操作:它将是一个 2D 地图,我的意思是 2 个键和一个值。

但是这里实现的迭代器不起作用..我不知道如何在 TrueStringMap2D 中重新定义 Iterator 方法:S(如果可能的话,应该在 iterator() 函数中删除)任何人都可以帮忙吗?非常感谢你!!

4

1 回答 1

2

我会将这个问题重新解释为我喜欢回答的类似问题,然后希望该问题的答案对您有用。

这是我要回答的问题:

如何编写一个迭代 a 中所有值的迭代器Map<String, Map<String, String>>

这就是我将如何解决它:

class TwoDimIterator implements Iterator<String> {

    Iterator<Map<String, String>> outerIter;
    Iterator<String> innerIter = Collections.<String>emptyList().iterator();

    public TwoDimIterator(Map<String, Map<String, String>> twoDimMap) {
        outerIter = twoDimMap.values().iterator();
        advanceInner();
    }

    @Override
    public boolean hasNext() {
        return innerIter.hasNext();
    }

    @Override
    public String next() {
         String toReturn = innerIter.next();
         advanceInner();
         return toReturn;
    }

    private void advanceInner() {
        while (!innerIter.hasNext()) {
            if (!outerIter.hasNext()) {
                innerIter = Collections.<String>emptyList().iterator();
                return;
            }
            innerIter = outerIter.next().values().iterator();
        }
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException();
    }
}

测试代码:

class Test {

    public static void main(String[] args) {

        // Create a map
        Map<String, Map<String, String>> twoDimMap =
                new HashMap<String, Map<String, String>>();

        // Fill it
        Map<String, String> innerA = new HashMap<String, String>();
        innerA.put("1", "A1");
        innerA.put("2", "A2");

        Map<String, String> innerB = new HashMap<String, String>();
        innerB.put("1", "B1");
        innerB.put("2", "B2");

        twoDimMap.put("A", innerA);
        twoDimMap.put("B", innerB);

        // Create an iterator for the values:
        Iterator<String> twoDimIter = new TwoDimIterator(twoDimMap);
        while (twoDimIter.hasNext())
            System.out.println(twoDimIter.next());

    }
}

输出:

A2
A1
B2
B1
于 2012-05-07T15:58:57.853 回答