Java7 Cartesian产品版本没有重复

时间:2017-02-26 12:06:04

标签: java java-7

假设我有一个set<Integer>(几千)。 我想要执行笛卡尔积,但没有任何重复。

重复条目被认为在集合中具有反向元素(即<1,3><3,1>被视为重复)。

我怎样才能有效地做到这一点?

首先,我使用Sets.cartesianProduct(set, set)导致~22M元素,但它也包含重复。再次迭代该列表以检查result.contains(..)根本没有效率。

1 个答案:

答案 0 :(得分:1)

好笑,我已经乱搞了几个小时了,当我在Stackoverflow中写一个问题时,我突然意识到答案了;)

编辑@DmitryGorkovets改进

for (int i = 0; i < list.size(); i++) {
    for (int j = i+1; j < list.size(); j++) {
        result.add(new Pair<>(list.get(i), list.get(j)));
    }
}