java 泛型深入之Set实用工具 各种集合泛型深入使用示例,匿名内部类、内部类应用于泛型探讨

java 泛型深入之Set实用工具 各种集合泛型深入使用示例,匿名内部类、内部类应用于泛型探讨

  1. //Sets.java  
  2. package org.rui.generics.set;  
  3.   
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6. /** 
  7.  * 一个Set实用工具 
  8.  * @author lenovo 
  9.  * 
  10.  */  
  11. public class Sets {  
  12.       
  13.     public static<T> Set<T> union(Set<T> a,Set<T> b)  
  14.     {  
  15.         Set<T> result=new HashSet<T>(a);  
  16.         result.addAll(b);  
  17.         return result;  
  18.     }  
  19.       
  20.     //保留 相同  
  21.     public static <T> Set<T> intersection(Set<T> a,Set<T> b)  
  22.     {  
  23.         Set<T> result=new HashSet<T>(a);  
  24.         result.retainAll(b);  
  25.         return result;  
  26.     }  
  27.     // 差值 //去掉相同  
  28.     public static <T> Set<T> difference(Set<T> a,Set<T> b)  
  29.     {  
  30.         Set<T> result=new HashSet<T>(a);  
  31.         result.removeAll(b);  
  32.         return result;  
  33.     }  
  34.       
  35. //除了交集之外的所有过犹元素  
  36.     public static <T> Set<T> complement(Set<T> a,Set<T> b)  
  37.     {  
  38.         return difference(union(a,b),intersection(a,b));  
  39.     }  
  40.       
  41.     public static void main(String[] args) {  
  42.         Set<String> result=new HashSet<String>();  
  43.         result.add("a");  
  44.         result.add("b");  
  45.         Set<String> result2=new HashSet<String>();  
  46.         result2.add("b");  
  47.           
  48.         Set<String> results=complement(result,result2);  
  49.         for(String s:results){  
  50.             System.out.println(s);  
  51.         }  
  52.     }  
  53. }  
  54.    

  1. //Watercolors.java  
  2. package org.rui.generics.set;  
  3.   
  4. //水彩画  
  5. public enum Watercolors {  
  6.     ZINC,LEMON_TYLLOW,MEDIUM_YELLOW,DEEP_YELLOW,ORANGE,  
  7.     BRILLIANT_RED  
  8.   
  9. }  

  1. //WatercolorSets.java  
  2. package org.rui.generics.set;  
  3.   
  4. import java.util.EnumSet;  
  5. import java.util.Set;  
  6. /** 
  7.  * EnumSet 使用示例 
  8.  * @author lenovo 
  9.  * 
  10.  */  
  11. public class WatercolorSets {  
  12.       
  13.     public static void main(String[] args) {  
  14.         Set<Watercolors> set1=EnumSet.range(  
  15.                 Watercolors.LEMON_TYLLOW,  
  16.                 Watercolors.ORANGE  
  17.                 );  
  18.           
  19.         Set<Watercolors> set2=EnumSet.range(  
  20.                 Watercolors.ZINC,  
  21.                 Watercolors.MEDIUM_YELLOW);  
  22.         System.out.println(set1);  
  23.         System.out.println(set2);  
  24.         //union  
  25.         System.out.println(" union 1 2:" +Sets.union(set1, set2));  
  26.         //intersection  
  27.         System.out.println("intersection:"+Sets.intersection(set1, set2));  
  28.         //difference 差异  
  29.         System.out.println("difference1:"+Sets.difference(set1, set2));  
  30.         System.out.println("difference2:"+Sets.difference(set2, set1));  
  31.           
  32.         //complement补足  
  33.         System.out.println("complement:"+Sets.complement(set1, set2));  
  34.           
  35.           
  36.     }  
  37.   
  38. }  

  1. //Watercolors.java  
  2. package org.rui.generics.set;  
  3. import java.lang.reflect.Method;  
  4. import java.util.*;  
  5. /** 
  6.  * 我们可以从输出中看到各种关系运算的结果 
  7.  *  
  8.  * @author lenovo 
  9.  * 
  10.  */  
  11. public class ContainerMethodDifferences {  
  12.     static Set<String> methodSet(Class<?> type)  
  13.     {  
  14.         Set<String> result =new TreeSet<String>();  
  15.         for(Method m:type.getMethods())  
  16.             result.add(m.getName());  
  17.           
  18.         return result;  
  19.     }  
  20.       
  21.     static void interfaces(Class<?> type)  
  22.     {  
  23.         System.out.println("interfaces in:"+type.getSimpleName());  
  24.         List<String> result=new ArrayList<String>();  
  25.         for(Class<?> c:type.getInterfaces())  
  26.             result.add(c.getSimpleName());  
  27.         System.out.println("result:"+result);  
  28.     }  
  29.   
  30.     static Set<String> object=methodSet(Object.class);  
  31.     static{object.add("clone");}  
  32.     //difference  
  33.     static void difference(Class<?> superset,Class<?> subset)  
  34.     {  
  35.         System.out.println(superset.getSimpleName()+  
  36.                 " extends:"+subset.getSimpleName());  
  37.           
  38.         Set<String> comp=Sets.difference(  
  39.                 methodSet(superset), methodSet(subset));  
  40.           
  41.         comp.removeAll(object);  
  42.         System.out.println("object:"+comp);  
  43.         interfaces(superset);  
  44.     }  
  45.       
  46.       
  47.     //mian  
  48.     public static void main(String[] args) {  
  49.         /*System.out.println("collection:"+ 
  50.                 methodSet(Collection.class)); 
  51.          
  52.         interfaces(Collections.class);*/  
  53.         System.out.println("----Set-----------------------------");  
  54.         difference(Set.class,Collections.class);  
  55.         System.out.println("----HashSet-----------------------------");  
  56.         difference(HashSet.class,Set.class);  
  57.         System.out.println("----LinkedHashSet-----------------------------");  
  58.         difference(LinkedHashSet.class,HashSet.class);  
  59.         System.out.println("----TreeSet-----------------------------");  
  60.         difference(TreeSet.class,Set.class);  
  61.         System.out.println("-----List----------------------------");  
  62.         difference(List.class,Collection.class);  
  63.         System.out.println("------ArrayList---------------------------");  
  64.         difference(ArrayList.class,List.class);  
  65.         System.out.println("------LinkedList---------------------------");  
  66.         difference(LinkedList.class,List.class);  
  67.         System.out.println("------Queue---------------------------");  
  68.         difference(Queue.class,Collection.class);  
  69.         System.out.println("------PriorityQueue---------------------------");  
  70.         difference(PriorityQueue.class,Queue.class);  
  71.           
  72.         System.out.println("Map:"+methodSet(Map.class));  
  73.         System.out.println("------HashMap---------------------------");  
  74.         difference(HashMap.class,Map.class);  
  75.         System.out.println("------LinkedHashMap---------------------------");  
  76.         difference(LinkedHashMap.class,HashMap.class);  
  77.         System.out.println("------TreeMap---------------------------");  
  78.         difference(TreeMap.class,Map.class);  
  79.         //分类  
  80.         System.out.println("------SortedMap---------------------------");  
  81.         difference(SortedMap.class,Map.class);  
  82.     }  
  83.       
  84. }/*output: 
  85. ----Set----------------------------- 
  86. Set extends:Collections 
  87. object:[toArray, iterator, remove, containsAll, contains, add, size, clear, isEmpty, retainAll, removeAll] 
  88. interfaces in:Set 
  89. result:[Collection] 
  90. ----HashSet----------------------------- 
  91. HashSet extends:Set 
  92. object:[] 
  93. interfaces in:HashSet 
  94. result:[Set, Cloneable, Serializable] 
  95. ----LinkedHashSet----------------------------- 
  96. LinkedHashSet extends:HashSet 
  97. object:[] 
  98. interfaces in:LinkedHashSet 
  99. result:[Set, Cloneable, Serializable] 
  100. ----TreeSet----------------------------- 
  101. TreeSet extends:Set 
  102. object:[lower, last, higher, descendingIterator, subSet, pollLast, comparator, pollFirst, floor, headSet, ceiling, tailSet, first, descendingSet] 
  103. interfaces in:TreeSet 
  104. result:[NavigableSet, Cloneable, Serializable] 
  105. -----List---------------------------- 
  106. List extends:Collection 
  107. object:[get, set, listIterator, lastIndexOf, indexOf, subList] 
  108. interfaces in:List 
  109. result:[Collection] 
  110. ------ArrayList--------------------------- 
  111. ArrayList extends:List 
  112. object:[trimToSize, ensureCapacity] 
  113. interfaces in:ArrayList 
  114. result:[List, RandomAccess, Cloneable, Serializable] 
  115. ------LinkedList--------------------------- 
  116. LinkedList extends:List 
  117. object:[offerFirst, removeFirstOccurrence, pop, peekLast, push, descendingIterator, poll, peek, removeFirst, pollLast, getFirst, offerLast, element, removeLast, offer, pollFirst, addLast, addFirst, peekFirst, getLast, removeLastOccurrence] 
  118. interfaces in:LinkedList 
  119. result:[List, Deque, Cloneable, Serializable] 
  120. ------Queue--------------------------- 
  121. Queue extends:Collection 
  122. object:[element, offer, poll, peek] 
  123. interfaces in:Queue 
  124. result:[Collection] 
  125. ------PriorityQueue--------------------------- 
  126. PriorityQueue extends:Queue 
  127. object:[comparator] 
  128. interfaces in:PriorityQueue 
  129. result:[Serializable] 
  130. Map:[clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values] 
  131. ------HashMap--------------------------- 
  132. HashMap extends:Map 
  133. object:[] 
  134. interfaces in:HashMap 
  135. result:[Map, Cloneable, Serializable] 
  136. ------LinkedHashMap--------------------------- 
  137. LinkedHashMap extends:HashMap 
  138. object:[] 
  139. interfaces in:LinkedHashMap 
  140. result:[Map] 
  141. ------TreeMap--------------------------- 
  142. TreeMap extends:Map 
  143. object:[pollLastEntry, firstKey, floorEntry, ceilingEntry, lowerEntry, lastEntry, subMap, tailMap, navigableKeySet, higherEntry, lowerKey, headMap, firstEntry, comparator, descendingKeySet, descendingMap, pollFirstEntry, lastKey, higherKey, floorKey, ceilingKey] 
  144. interfaces in:TreeMap 
  145. result:[NavigableMap, Cloneable, Serializable] 
  146. ------SortedMap--------------------------- 
  147. SortedMap extends:Map 
  148. object:[tailMap, firstKey, headMap, comparator, lastKey, subMap] 
  149. interfaces in:SortedMap 
  150. result:[Map] 
  151. */  

---------------------------------------------------------------------------------------------------------------------------------------


  1. //Generator.java  
  2. package org.rui.generics.anonymity;  
  3.   
  4. public interface Generator<T> {  
  5.   
  6.     //返回泛型的内型对象  
  7.     T next();  
  8.       
  9. }  

  1. //Generators.java  
  2. package org.rui.generics.anonymity;  
  3.   
  4. import java.util.Collection;  
  5. /** 
  6.  * 利用生成器很方便的填充一个collection 
  7.  * @author lenovo 
  8.  * 
  9.  */  
  10. public class Generators   
  11. {  
  12.   public static<T> Collection<T> fill(Collection<T> coll,Generator<T> gen,int n)  
  13.   {  
  14.       System.out.println("gen.next():"+gen.next());  
  15.       for(int i=0;i<n;i++)  
  16.       {  
  17.           coll.add(gen.next());  
  18.       }  
  19.     return coll;  
  20.       
  21.   }  
  22. }  

  1. //BankTeller.java  
  2. package org.rui.generics.anonymity;  
  3.   
  4. import java.util.ArrayList;  
  5. import java.util.LinkedList;  
  6. import java.util.List;  
  7. import java.util.Queue;  
  8. import java.util.Random;  
  9. /** 
  10.  * 匿名内部类 内部类 就用于泛型 
  11.  *  generator 都生明成了static的,所以它们无法作为接口的一部分, 
  12.  *  因为无法用接口这种特定的惯用法来泛化这二者。 
  13.  *  尽管如此,它们fill()方法中都工作的很好 
  14.  *   
  15.  * @author lenovo 
  16.  * 
  17.  */  
  18.   
  19. class Customer  
  20. {  
  21.     private static long counter=1;  
  22.     private final long id=counter++;  
  23.     private Customer(){}  
  24.     public String toString(){return "Customer:"+id;}  
  25.       
  26.     //每次会创建一个新的客户对象  
  27.     public static Generator<Customer> generator(){  
  28.         return new Generator<Customer>(){  
  29.             public Customer next(){return new Customer();}  
  30.         };  
  31.     }  
  32.       
  33. }  
  34.   
  35.  出纳员  
  36.  class Teller  
  37.  {  
  38.      private static long counter=1;  
  39.      private final long id=counter++;  
  40.      private Teller(){}  
  41.      public String toString(){return "Teller"+id;}  
  42.        
  43.      //Teller就只创建了一个public 的generator对象  
  44.      public static Generator<Teller> generator=new  Generator<Teller>()  
  45.              {  
  46.                 public Teller next()   
  47.                 {  
  48.                     return new Teller();  
  49.                 }  
  50.            
  51.              };  
  52.  }  
  53.   
  54. //  出纳员  
  55. public class BankTeller {  
  56.       
  57.     public static void serve(Teller t,Customer c)  
  58.     {  
  59.         System.out.println(t+" serves "+c);  
  60.     }  
  61.       
  62.   public static void main(String[] args)   
  63.   {  
  64.     Random random=new Random(47);  
  65.     //生成客户对象15个  
  66.     Queue<Customer> line=new LinkedList<Customer>();  
  67.     Generators.fill(line, Customer.generator(), 15);  
  68.       
  69.     //出纳员对象4个   
  70.     List<Teller> tellers=new ArrayList<Teller>();  
  71.     Generators.fill(tellers, Teller.generator, 4);  
  72.       
  73.     for(Customer c:line)  
  74.         serve(tellers.get(random.nextInt(tellers.size())),c);  
  75.       
  76.   }  
  77.   
  78. }  
  79.     /*output: 
  80.     Teller3 serves Customer1 
  81.     Teller2 serves Customer2 
  82.     Teller3 serves Customer3 
  83.     Teller1 serves Customer4 
  84.     Teller1 serves Customer5 
  85.     Teller3 serves Customer6 
  86.     Teller1 serves Customer7 
  87.     Teller2 serves Customer8 
  88.     Teller3 serves Customer9 
  89.     Teller3 serves Customer10 
  90.     Teller2 serves Customer11 
  91.     Teller4 serves Customer12 
  92.     Teller2 serves Customer13 
  93.     Teller1 serves Customer14 
  94.     Teller1 serves Customer15 
  95.      * *///:~~~ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值