假设我有一个set<Integer>
(几千)。
我想要执行笛卡尔积,但没有任何重复。
重复条目被认为在集合中具有反向元素(即<1,3>
和<3,1>
被视为重复)。
我怎样才能有效地做到这一点?
首先,我使用Sets.cartesianProduct(set, set)
导致~22M元素,但它也包含重复。再次迭代该列表以检查result.contains(..)
根本没有效率。
答案 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)));
}
}