0

我知道如何迭代哈希图,但我不确定我们是否可以在单个哈希图上设置 2 个迭代器?

假设我有以下哈希图:

Map m = new HashMap<Integer, String>;
m.put(112334,"A");
m.put(221345,"B");
m.put(321411,"C");
m.put(431254,"D");

我想以不重复任何对的方式从 Hashmap 中获取所有值组合。所以在这种情况下,4 个值 --> 6 对(AB、AC、AD、BC、BD、CD)。我在想类似的东西:

for(int i=0; i < (size-1); i++)
    for(int l = 1;  < size; l++)....

但是在java中我们使用迭代器,那么我怎么能使用迭代器呢?(如果您能找到一种方法来使用该集合的索引也可以)。

PS:对不起,我刚从 C++ 转到 java,所以我需要你的帮助。

4

2 回答 2

1

确保这些值实现了Comparable. 字符串实现Comparable<String>所以你很好(如果你愿意,可以阅读一些关于 Comparable 的教程)。

执行双循环以获取所有对 (x,y),然后使用以下方法排除 (x,x) 和 (y,x) compareTo

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(112334,"A");
map.put(221345,"B");
map.put(321411,"C");
map.put(431254,"D");

Collection<String> values = map.values();
for (String str1 : values) {
    for (String str2 : values) {
        if (str1.compareTo(str2) < 0) {
            System.out.println(String.format("unique pair: (%s, %s)", str1, str2));
            // or whatever you want but do not modify map here!
        }
    }
}
于 2013-06-22T06:30:41.780 回答
0

鉴于您的其余方法,使用for您在问题中发布的两个循环以及一些修复没有任何问题。

for(int i=0; i < (size-1); i++)
    for(int l = i+1; l < size; l++)....

Map也就是说,当数组可能是您真正想要的时,我肯定不会使用 a 方法。

于 2013-06-22T06:29:52.910 回答