Java 如何在一个hashmap上设置2个迭代器

Java 如何在一个hashmap上设置2个迭代器,java,loops,iterator,hashmap,Java,Loops,Iterator,Hashmap,我知道如何在hashmap上迭代,但我不确定是否可以在单个hashmap上设置2个迭代器 假设我有以下hashmap: Map m = new HashMap<Integer, String>; m.put(112334,"A"); m.put(221345,"B"); m.put(321411,"C"); m.put(431254,"D"); Map m=新的HashMap; m、 put(112334,“A”); m、 付诸表决(221345,“B”); m、 付诸表决(321

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

假设我有以下hashmap:

Map m = new HashMap<Integer, String>;
m.put(112334,"A");
m.put(221345,"B");
m.put(321411,"C");
m.put(431254,"D");
Map m=新的HashMap;
m、 put(112334,“A”);
m、 付诸表决(221345,“B”);
m、 付诸表决(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++)....
for(int i=0;i<(size-1);i++)
对于(int l=1;
但是在java中,我们使用迭代器,那么如何使用迭代器呢?(如果您能找到一种使用集合索引的方法,也可以)


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

,在剩下的方法中,使用< <代码> > < /Clult>循环没有问题,正如你在你的问题中加上了几个修正。
for(int i=0; i < (size-1); i++)
    for(int l = i+1; l < size; l++)....
for(int i=0;i<(size-1);i++)
对于(int l=i+1;l

也就是说,当数组可能是您真正想要的时,我当然不会使用
映射。

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

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

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!
        }
    }
}
Map Map=newhashmap();
地图放置(112334,“A”);
地图放置(221345,“B”);
地图放置(321411,“C”);
地图放置(431254,“D”);
集合值=map.values();
for(字符串str1:值){
for(字符串str2:值){
if(str1.与(str2)<0比较){
System.out.println(String.format(“唯一对:(%s,%s)”,str1,str2));
//或者你想要的任何东西,但不要在这里修改地图!
}
}
}

对不起,我的错,我想我应该更具体一点。此处的(整数)键不存储索引。它存储另一个整数值,不能用于迭代,所以想象它是这样的m.put(11234,“A”);m、 付诸表决(23451,“B”);m、 付诸表决(31235,“C”);m、 付诸表决(51233,“D”);你所说的可比性是什么意思?你想让我做一个双循环,看看这一对是否存在?如果我有N个元素,那么我必须得到所有的N*N对并检查?它比我得到N*(N-1)/2对更快吗?我不得不说,我的集合包含超过100000个元素…@Nexus让我的答案更加冗长(第一个版本来自智能手机)。现在关于性能问题:“过早优化是万恶之源”(你可以用谷歌搜索)。首先,尝试简单的方法。如果速度太慢,那么仍然可以使用数组。或者切换回C。C有助于编写快速程序。java很适合编写可读和可维护的程序。好吧,听起来不错,你使用集合而不是数组,我将尝试一种方法:)好吧,我找到了一种解决方法,我需要的是将hashmap转换为arraylist。最好列出mylist=new arraylist(m.values());