列出集合元素的所有组合

时间:2014-05-18 15:30:43

标签: java list set combinations

在集合的元素中,我想列出该集合的所有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));

但是如何使用集合而不将其转换为列表?

2 个答案:

答案 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,此时它开始生成组合输出。

Here is a demo on ideone.

答案 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);
    }
  }
}