2012-04-08 48 views
1

我打破了我的想法,以找到解決以下問題。 我有4個不同的ArrayList從數據庫中獲取它們的值。 他們可以從0(包括)的大小,直到永遠。 每個列表也可能具有不同的大小和值。 我試圖有效地做的是: 比較所有非0大小的列表,並檢查它們是否有一些常見的整數和那些值。ArrayList比較和獲取共享值

任何想法? 謝謝!

回答

6

如果您需要爲所有常見的整數,不包括空的集合:

List<List<Integer>> lists = ... 
Collection<Integer> common = new HashSet<Integer>(lists.get(0)); 
for (int i = 1; i < lists.size(); i++) { 
    if (!lists.get(i).isEmpty()) 
    common.retainAll(lists.get(i)); 
} 

末的common將包含整數是常見的所有的人。

+1

如果其中一個列表是空的,這個工作是否可行?因爲如果它是空的,我仍然需要知道其他列表中是否有共同的值。 – Vagelism 2012-04-08 14:25:28

+1

你需要什麼 - 所有列表中的普通整數,或者是一組整數,其中每一個對於其中至少兩個是共同的? – 2012-04-08 14:29:46

+0

只是所有具有值的列表的常見整數。如果它們沒有值,則不需要在它們之間進行比較。例如,如果3個列表中有值,我想知道是否存在共同值其中3個是什麼,這個值是什麼。 – Vagelism 2012-04-08 14:33:19

2

你可能會想使用Apache的百科全書CollectionUtils.intersection()得到兩個集合的交集......

迭代產生交集,如果當你完成它不是空的 - 你有一個共同的元素,它在這個結果集合中。

關於空列表:只需檢查它的size()是否爲0,如果是 - 跳過此列表。

0

你可以這樣做。如果您有多個要搜索的元素,請將搜索放在一個循環中。

List aList = new ArrayList(); aList.add(new Integer(1));

如果(!ALIST = NULL & & aList.isEmpty()){ 如果(aList.contains(1)){ 的System.out.println( 「知道了」); } }

2

您可以對ArrayList對象使用set交集操作。

事情是這樣的:

List<Integer> l1 = new ArrayList<Integer>(); 

l1.add(1); 
l1.add(2); 
l1.add(3); 

List<Integer> l2= new ArrayList<Integer>(); 
l2.add(4); 
l2.add(2); 
l2.add(3); 

List<Integer> l3 = new ArrayList<Integer>(l2); 
l3.retainAll(l1); 

現在,L3應該有L1和L2之間唯一的共同元素。

+0

與2列表似乎很容易!現在如果有4個,我們不知道女巫是否有價值? – Vagelism 2012-04-08 14:36:38