Java中的Set操作

来源:互联网 发布:短期迅速提高算法题 编辑:程序博客网 时间:2024/05/21 09:31

首先看一个例子:

Set operations: union(并集), intersection(交集),asymetric difference(非对称差集), symmetric difference(对称差集), is subset(子集), is superset(超集)

[java] view plaincopy
  1. import java.util.Set;  
  2. import java.util.TreeSet;  
  3. public class SetTest {  
  4.   public static <T> Set<T> union(Set<T> setA, Set<T> setB) {  
  5.     Set<T> tmp = new TreeSet<T>(setA);  
  6.     tmp.addAll(setB);  
  7.     return tmp;  
  8.   }  
  9.   public static <T> Set<T> intersection(Set<T> setA, Set<T> setB) {  
  10.     Set<T> tmp = new TreeSet<T>();  
  11.     for (T x : setA)  
  12.       if (setB.contains(x))  
  13.         tmp.add(x);  
  14.     return tmp;  
  15.   }  
  16.     
  17.   public static <T> Set<T> intersection2(Set<T> setA, Set<T> setB) {  
  18.         Set<T> tmp = new TreeSet<T>(setA);  
  19.         tmp.retainAll(setB);  
  20.         return tmp;  
  21.   }  
  22.   public static <T> Set<T> difference(Set<T> setA, Set<T> setB) {  
  23.     Set<T> tmp = new TreeSet<T>(setA);  
  24.     tmp.removeAll(setB);  
  25.     return tmp;  
  26.   }  
  27.   public static <T> Set<T> symDifference(Set<T> setA, Set<T> setB) {  
  28.     Set<T> tmpA;  
  29.     Set<T> tmpB;  
  30.     tmpA = union(setA, setB);  
  31.     tmpB = intersection(setA, setB);  
  32.     return difference(tmpA, tmpB);  
  33.   }  
  34.   public static <T> boolean isSubset(Set<T> setA, Set<T> setB) {  
  35.     return setB.containsAll(setA);  
  36.   }  
  37.   public static <T> boolean isSuperset(Set<T> setA, Set<T> setB) {  
  38.     return setA.containsAll(setB);  
  39.   }  
  40.   public static void main(String args[]) {  
  41.     TreeSet<Character> set1 = new TreeSet<Character>();  
  42.     TreeSet<Character> set2 = new TreeSet<Character>();  
  43.     set1.add('A');  
  44.     set1.add('B');  
  45.     set1.add('C');  
  46.     set1.add('D');  
  47.     set2.add('C');  
  48.     set2.add('D');  
  49.     set2.add('E');  
  50.     set2.add('F');  
  51.     System.out.println("set1: " + set1);  
  52.     System.out.println("set2: " + set2);  
  53.     System.out.println("Union: " + union(set1, set2));  
  54.     System.out.println("Intersection: " + intersection(set1, set2));  
  55.     System.out.println("Intersection2: " + intersection2(set1, set2));  
  56.     System.out.println("Difference (set1 - set2): " + difference(set1, set2));  
  57.     System.out.println("Symmetric Difference: " + symDifference(set1, set2));  
  58.     TreeSet<Character> set3 = new TreeSet<Character>(set1);  
  59.     set3.remove('D');  
  60.     System.out.println("set3: " + set3);  
  61.     System.out.println("Is set1 a subset of set2? " + isSubset(set1, set3));  
  62.     System.out.println("Is set1 a superset of set2? " + isSuperset(set1, set3));  
  63.     System.out.println("Is set3 a subset of set1? " + isSubset(set3, set1));  
  64.     System.out.println("Is set3 a superset of set1? " + isSuperset(set3, set1));  
  65.   }  
  66. }  

这里很重要的是,一些集合操作会修改原始集合,比如addAll,retainAll,removeAll。尤其是你要重复操作原始集合的时候,一定要新建一个集合,new  TreeSet<T> ( orginalSet )。

0 0
原创粉丝点击