首先看一個例子:
Set operations: union(並集), intersection(交集),asymetric difference(非對稱差集), symmetric difference(對稱差集), is subset(子集), is superset(超集)
import java.util.Set;<br />import java.util.TreeSet;<br />public class SetTest {<br /> public static <T> Set<T> union(Set<T> setA, Set<T> setB) {<br /> Set<T> tmp = new TreeSet<T>(setA);<br /> tmp.addAll(setB);<br /> return tmp;<br /> }<br /> public static <T> Set<T> intersection(Set<T> setA, Set<T> setB) {<br /> Set<T> tmp = new TreeSet<T>();<br /> for (T x : setA)<br /> if (setB.contains(x))<br /> tmp.add(x);<br /> return tmp;<br /> }</p><p> public static <T> Set<T> intersection2(Set<T> setA, Set<T> setB) {<br /> Set<T> tmp = new TreeSet<T>(setA);<br /> tmp.retainAll(setB);<br /> return tmp;<br /> }<br /> public static <T> Set<T> difference(Set<T> setA, Set<T> setB) {<br /> Set<T> tmp = new TreeSet<T>(setA);<br /> tmp.removeAll(setB);<br /> return tmp;<br /> }<br /> public static <T> Set<T> symDifference(Set<T> setA, Set<T> setB) {<br /> Set<T> tmpA;<br /> Set<T> tmpB;<br /> tmpA = union(setA, setB);<br /> tmpB = intersection(setA, setB);<br /> return difference(tmpA, tmpB);<br /> }<br /> public static <T> boolean isSubset(Set<T> setA, Set<T> setB) {<br /> return setB.containsAll(setA);<br /> }<br /> public static <T> boolean isSuperset(Set<T> setA, Set<T> setB) {<br /> return setA.containsAll(setB);<br /> }<br /> public static void main(String args[]) {<br /> TreeSet<Character> set1 = new TreeSet<Character>();<br /> TreeSet<Character> set2 = new TreeSet<Character>();<br /> set1.add('A');<br /> set1.add('B');<br /> set1.add('C');<br /> set1.add('D');<br /> set2.add('C');<br /> set2.add('D');<br /> set2.add('E');<br /> set2.add('F');<br /> System.out.println("set1: " + set1);<br /> System.out.println("set2: " + set2);<br /> System.out.println("Union: " + union(set1, set2));<br /> System.out.println("Intersection: " + intersection(set1, set2));<br /> System.out.println("Intersection2: " + intersection2(set1, set2));<br /> System.out.println("Difference (set1 - set2): " + difference(set1, set2));<br /> System.out.println("Symmetric Difference: " + symDifference(set1, set2));<br /> TreeSet<Character> set3 = new TreeSet<Character>(set1);<br /> set3.remove('D');<br /> System.out.println("set3: " + set3);<br /> System.out.println("Is set1 a subset of set2? " + isSubset(set1, set3));<br /> System.out.println("Is set1 a superset of set2? " + isSuperset(set1, set3));<br /> System.out.println("Is set3 a subset of set1? " + isSubset(set3, set1));<br /> System.out.println("Is set3 a superset of set1? " + isSuperset(set3, set1));<br /> }<br />}
這裡很重要的是,一些集合操作會修改原創組合,比如addAll,retainAll,removeAll。尤其是你要重複操作原創組合的時候,一定要建立一個集合,new
TreeSet<T>
(
orginalSet
)。
參考:
http://www.java2s.com/Code/Java/Collections-Data-Structure/Set.htm