2013-04-26 55 views
1

我有5組數字值。我有興趣找到所有5組的交集。找到5組交集的有效方法

現在,我想到的是以下

Do a Collections.sort() on all 5 sets 

找到最短的一組和所有其他組做了

shortestSet.retainAll(otherSet); 

有沒有更有效的方法來做到這一點?

+1

我認爲這將是一個有效的方法(假設你的意思是排序集*的大小*) – 2013-04-26 18:11:28

+1

幾乎dup:http://stackoverflow.com/questions/7574311/efficiently-compute-intersection-of- java中的兩個集合 – leonbloy 2013-04-26 18:11:28

回答

0

您的解決方案很好。不過,在調用retainAll方法之前,不需要對數字進行排序。

0

嘗試使用

static <E> Sets.SetView<E> intersection(Set<E> set1, Set<?> set2) 

Google Guava

2

你的解決方案看起來我的權利,如果我們明白,當你根據自己的尺寸寫Collections.sort()要排序的集列表。基本原理是,如果我們打算使用set1.retainAll(set2)(並且如果集合是HashSet s),則每個交點運行時間應該基本上與set1的元素數成線性關係。所以從最小的一個開始是有道理的。

+0

除了在調用retainAll()之前按大小對集合進行排序外,如果我們對集合本身進行排序,它會有所不同嗎? – Skynet 2013-04-26 18:44:43

+0

@Skynet:沒有(如果你正在討論排序集的內容)。 – nhahtdh 2013-04-26 18:46:47

+0

@Skynet:沒有。另外,套沒有訂單。 (你'排序'列表,沒有設置) – leonbloy 2013-04-26 19:07:58