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)
。