也就是說,如果我有兩套或多套,我想返回包含任何新集:Java:有沒有一種方便,快捷的方式來將AND,OR或XOR集在一起?
- 所有各組有共同(AND)的元素。
- 每個集合(OR)的所有元素總數。
- 所有元素都是唯一的元素。 (XOR)。
有沒有一種簡單的方法可以做到這一點?
編輯:這是錯誤的術語,不是嗎?
也就是說,如果我有兩套或多套,我想返回包含任何新集:Java:有沒有一種方便,快捷的方式來將AND,OR或XOR集在一起?
有沒有一種簡單的方法可以做到這一點?
編輯:這是錯誤的術語,不是嗎?
假設2組對象a和b
AND(兩組交點)
a.retainAll(b);
OR的兩組(聯合)
a.addAll(b);
XOR 要麼推出自己的循環:
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
或做到這一點:
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
見Set documentation這page。更多。
http://java.sun.com/docs/books/tutorial/collections/interfaces/set.html上關於集合的教程討論可能也是有幫助的背景。 – 2008-12-26 18:11:03
@Milhous說:
退房套API。如果你使用 addAll你可以得到或。如果你使用 retainAll你可以得到和。我沒有 瞭解XOR。
好像如果你有套s1
和s2
你可以做到這一點得到XOR:
s1
複製到s3
s1.removeAll(s2);
(現S1包含不在S2的所有元素)s2.removeAll(s3);
(s2現在包含不在s3 =舊s1中的所有元素)s1.addAll(s2);
(現在S1包含上述兩個集合的並集)我敢肯定,雅加達共同集合API支持工會,十字路口等
我會很驚訝,如果谷歌集合API並沒有爲好。
不幸的是,Commons Collections Lib不提供仿製藥。 – 2009-06-16 17:10:55
可以使用具有方法intersection()union()和symmetricDifference()的Google-Collections Sets class。
Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
具有集合的正確術語是聯合(或),交集(和),對稱差異(異或)。 – Brian 2008-12-26 16:58:01
謝謝。正試圖回想起這一點。 – 2008-12-26 17:04:33