Java-While for迭代器hashmap

我试图遍历HashMap MyMap中的项目,以便获得2个键(节点)的所有可能组合对:

我使用以下代码:

Iterator Iterator1= MyMap.entrySet().iterator();

while (Iterator1.hasNext() ) {
    Map.Entry X = (Map.Entry) Iterator1.next();
    NodeX=(String) X.getKey();                       
    Iterator Iterator2= MyMap.entrySet().iterator();

    while (Iterator2.hasNext() ) {
        Map.Entry Y = (Map.Entry) Iterator2.next();
        NodeY= (String) Y.getKey();                                        
        System.out.println("{ "+NodeX+" , "+NodeY+" }");
    }

}

每次编译器成功执行第一个“ while循环”时,它都会使用哈希图的第一个键重新启动.在第二个“ while循环”期间,我想从当前选择的NodeX的以下元素启动NodeY.

这是我想要的输出:

>循环1:(a,b),(a,c),(a,d),(a,e),….
>循环2:(b,c),(b,d),(b,e),….
> loop3:(c,d),(c,e),…..

解决方法:

在纯逻辑方面,我更喜欢不使用两个迭代器,而只是使用基于索引的解决方案.您可以简单地将Set转换为列表,以便能够基于索引获取每个项目. (可以是更简单的解决方案,但我确实

    Map<String, String> map = new HashMap<>();
    map.put("a", "");
    map.put("b", "");
    map.put("c", "");
    map.put("d", "");
    map.put("e", "");
    map.put("f", "");

    List<String> list = new ArrayList<String>(map.keySet());

    for (int i = 0; i < list.size() - 1; ++i) {
        String s = list.get(i);
        for (int j = i + 1; j < list.size(); ++j) {
            System.out.format("(%s, %s)%n", s, list.get(j));
        }
    }

外循环迭代每个项目(但最后一个除外),而内循环将从下一个项目直接迭代到最后.

a b
a c
a d
a e
a f
b c
b d
b e
b f
c d
c e
c f
d e
d f
e f

这并不是真正有效,因为您仍然需要创建一个数组才能做到这一点,但是,如果您不需要映射但可以直接使用List,则可以很容易地执行相同的逻辑.

上一篇:javascript-如何遍历h1元素并使用jquery使每个单词淡入?


下一篇:C#-在游戏循环中使用结构与参考变量