在集合的元素中,我想列出该集合的所有3种组合。 有办法吗?
如果是列表;
for(int i=0; i<list.size()-2; i++)
for(int j=i+1; j<list.size()-1; j++)
for(int k=j+1; k<list.size(); k++)
System.out.println(list.get(i) + " " + list.get(j) + " " + list.get(k));
但是如何使用集合而不将其转换为列表?
答案 0 :(得分:1)
转换为列表并使用代码中的逻辑将是我的首选。如果你想在不转换为列表的情况下这样做,你可以使用迭代器来完成它,如下所示:
Set<String> set = ...;
for (String a : set) {
boolean bGo = false;
for (String b : set) {
if (bGo) {
boolean cGo = false;
for (String c : set) {
if (cGo) {
System.out.println(a + " " + b + " " + c);
} else if (b.equals(c)) {
cGo = true;
}
}
} else if (a.equals(b)) {
bGo = true;
}
}
}
上面的逻辑自由地迭代外部循环中的集合。当它开始在第一个嵌套循环中迭代该集合时,它会跳过元素,直到找到外部循环的当前元素(即直到a.equals(b)
)。之后,它运行第三个嵌套循环,跳过集合中的所有数据,直到b
,此时它开始生成组合输出。
答案 1 :(得分:0)
你的设置是SortedSet吗?如果是这样,你可以这样做:
for (V x: mySet) {
for (V y: mySet.tailSet(x, false)) {
for (V z: mySet.tailSet(y, false)) {
System.out.println(x + " " + y + " " + z);
}
}
}