Java7笛卡尔乘积版本,无重复项

Java7笛卡尔乘积版本,无重复项,java,java-7,Java,Java 7,假设我有一个集合(几千个)。 我想执行笛卡尔积,但没有任何重复项 重复条目被认为在集合中有反向元素(即和被认为是重复的) 我怎样才能有效地做到这一点 首先,我使用了set.cartesianProduct(set,set),它产生了大约2200万个元素,但也包含重复。再次迭代该列表以检查结果。contains(…)一点效率都没有。有趣的是,我已经在这个问题上胡闹了几个小时,当我在Stackoverflow中写一个问题时,我自己突然意识到答案;) 在@dmitrygovets改进后编辑 for (

假设我有一个
集合
(几千个)。 我想执行笛卡尔积,但没有任何重复项

重复条目被认为在集合中有反向元素(即
被认为是重复的)

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


首先,我使用了
set.cartesianProduct(set,set)
,它产生了大约2200万个元素,但也包含重复。再次迭代该列表以检查
结果。contains(…)
一点效率都没有。

有趣的是,我已经在这个问题上胡闹了几个小时,当我在Stackoverflow中写一个问题时,我自己突然意识到答案;)

在@dmitrygovets改进后编辑

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)));
    }
}
for(int i=0;i
您是否可以选择从
set
切换到您可以排序的内容?对于j,您可以从
i+1
开始。在这种情况下,您不应该选中
i==j
。您没有指定,但我假定
list
是您集合的排序列表?@KlitosKyriacou实际上不是。为什么重要?你是对的,它们是否被分类并不重要。只要将原始集合转换为列表,您就可以使用
get(i)