java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
//Sets.javapackage org.rui.generics.set;import java.util.HashSet;import java.util.Set;/** * 一个Set有用工具 * @author lenovo * */public class Sets { public staticSet union(Set a,Set b) { Set result=new HashSet (a); result.addAll(b); return result; } //保留 同样 public static Set intersection(Set a,Set b) { Set result=new HashSet (a); result.retainAll(b); return result; } // 差值 //去掉同样 public static Set difference(Set a,Set b) { Set result=new HashSet (a); result.removeAll(b); return result; } //除了交集之外的全部过犹元素 public static Set complement(Set a,Set b) { return difference(union(a,b),intersection(a,b)); } public static void main(String[] args) { Set result=new HashSet (); result.add("a"); result.add("b"); Set result2=new HashSet (); result2.add("b"); Set results=complement(result,result2); for(String s:results){ System.out.println(s); } }}
//Watercolors.javapackage org.rui.generics.set;//水彩画public enum Watercolors { ZINC,LEMON_TYLLOW,MEDIUM_YELLOW,DEEP_YELLOW,ORANGE, BRILLIANT_RED}
//WatercolorSets.javapackage org.rui.generics.set;import java.util.EnumSet;import java.util.Set;/** * EnumSet 使用演示样例 * @author lenovo * */public class WatercolorSets { public static void main(String[] args) { Setset1=EnumSet.range( Watercolors.LEMON_TYLLOW, Watercolors.ORANGE ); Set set2=EnumSet.range( Watercolors.ZINC, Watercolors.MEDIUM_YELLOW); System.out.println(set1); System.out.println(set2); //union System.out.println(" union 1 2:" +Sets.union(set1, set2)); //intersection System.out.println("intersection:"+Sets.intersection(set1, set2)); //difference 差异 System.out.println("difference1:"+Sets.difference(set1, set2)); System.out.println("difference2:"+Sets.difference(set2, set1)); //complement补足 System.out.println("complement:"+Sets.complement(set1, set2)); }}
//Watercolors.javapackage org.rui.generics.set;import java.lang.reflect.Method;import java.util.*;/** * 我们能够从输出中看到各种关系运算的结果 * * @author lenovo * */public class ContainerMethodDifferences { static Set---------------------------------------------------------------------------------------------------------------------------------------methodSet(Class type) { Set result =new TreeSet (); for(Method m:type.getMethods()) result.add(m.getName()); return result; } static void interfaces(Class type) { System.out.println("interfaces in:"+type.getSimpleName()); List result=new ArrayList (); for(Class c:type.getInterfaces()) result.add(c.getSimpleName()); System.out.println("result:"+result); } static Set object=methodSet(Object.class); static{object.add("clone");} //difference static void difference(Class superset,Class subset) { System.out.println(superset.getSimpleName()+ " extends:"+subset.getSimpleName()); Set comp=Sets.difference( methodSet(superset), methodSet(subset)); comp.removeAll(object); System.out.println("object:"+comp); interfaces(superset); } //mian public static void main(String[] args) { /*System.out.println("collection:"+ methodSet(Collection.class)); interfaces(Collections.class);*/ System.out.println("----Set-----------------------------"); difference(Set.class,Collections.class); System.out.println("----HashSet-----------------------------"); difference(HashSet.class,Set.class); System.out.println("----LinkedHashSet-----------------------------"); difference(LinkedHashSet.class,HashSet.class); System.out.println("----TreeSet-----------------------------"); difference(TreeSet.class,Set.class); System.out.println("-----List----------------------------"); difference(List.class,Collection.class); System.out.println("------ArrayList---------------------------"); difference(ArrayList.class,List.class); System.out.println("------LinkedList---------------------------"); difference(LinkedList.class,List.class); System.out.println("------Queue---------------------------"); difference(Queue.class,Collection.class); System.out.println("------PriorityQueue---------------------------"); difference(PriorityQueue.class,Queue.class); System.out.println("Map:"+methodSet(Map.class)); System.out.println("------HashMap---------------------------"); difference(HashMap.class,Map.class); System.out.println("------LinkedHashMap---------------------------"); difference(LinkedHashMap.class,HashMap.class); System.out.println("------TreeMap---------------------------"); difference(TreeMap.class,Map.class); //分类 System.out.println("------SortedMap---------------------------"); difference(SortedMap.class,Map.class); } }/*output:----Set-----------------------------Set extends:Collectionsobject:[toArray, iterator, remove, containsAll, contains, add, size, clear, isEmpty, retainAll, removeAll]interfaces in:Setresult:[Collection]----HashSet-----------------------------HashSet extends:Setobject:[]interfaces in:HashSetresult:[Set, Cloneable, Serializable]----LinkedHashSet-----------------------------LinkedHashSet extends:HashSetobject:[]interfaces in:LinkedHashSetresult:[Set, Cloneable, Serializable]----TreeSet-----------------------------TreeSet extends:Setobject:[lower, last, higher, descendingIterator, subSet, pollLast, comparator, pollFirst, floor, headSet, ceiling, tailSet, first, descendingSet]interfaces in:TreeSetresult:[NavigableSet, Cloneable, Serializable]-----List----------------------------List extends:Collectionobject:[get, set, listIterator, lastIndexOf, indexOf, subList]interfaces in:Listresult:[Collection]------ArrayList---------------------------ArrayList extends:Listobject:[trimToSize, ensureCapacity]interfaces in:ArrayListresult:[List, RandomAccess, Cloneable, Serializable]------LinkedList---------------------------LinkedList extends:Listobject:[offerFirst, removeFirstOccurrence, pop, peekLast, push, descendingIterator, poll, peek, removeFirst, pollLast, getFirst, offerLast, element, removeLast, offer, pollFirst, addLast, addFirst, peekFirst, getLast, removeLastOccurrence]interfaces in:LinkedListresult:[List, Deque, Cloneable, Serializable]------Queue---------------------------Queue extends:Collectionobject:[element, offer, poll, peek]interfaces in:Queueresult:[Collection]------PriorityQueue---------------------------PriorityQueue extends:Queueobject:[comparator]interfaces in:PriorityQueueresult:[Serializable]Map:[clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values]------HashMap---------------------------HashMap extends:Mapobject:[]interfaces in:HashMapresult:[Map, Cloneable, Serializable]------LinkedHashMap---------------------------LinkedHashMap extends:HashMapobject:[]interfaces in:LinkedHashMapresult:[Map]------TreeMap---------------------------TreeMap extends:Mapobject:[pollLastEntry, firstKey, floorEntry, ceilingEntry, lowerEntry, lastEntry, subMap, tailMap, navigableKeySet, higherEntry, lowerKey, headMap, firstEntry, comparator, descendingKeySet, descendingMap, pollFirstEntry, lastKey, higherKey, floorKey, ceilingKey]interfaces in:TreeMapresult:[NavigableMap, Cloneable, Serializable]------SortedMap---------------------------SortedMap extends:Mapobject:[tailMap, firstKey, headMap, comparator, lastKey, subMap]interfaces in:SortedMapresult:[Map]*/
//Generator.javapackage org.rui.generics.anonymity;public interface Generator{ //返回泛型的内型对象 T next(); }
//Generators.javapackage org.rui.generics.anonymity;import java.util.Collection;/** * 利用生成器非常方便的填充一个collection * @author lenovo * */public class Generators { public staticCollection fill(Collection coll,Generator gen,int n) { System.out.println("gen.next():"+gen.next()); for(int i=0;i
//BankTeller.javapackage org.rui.generics.anonymity;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Random;/** * 匿名内部类 内部类 就用于泛型 * generator 都生明成了static的,所以它们无法作为接口的一部分, * 由于无法用接口这样的特定的惯使用方法来泛化这二者。 * 虽然如此,它们fill()方法中都工作的非常好 * * @author lenovo * */class Customer{ private static long counter=1; private final long id=counter++; private Customer(){} public String toString(){return "Customer:"+id;} //每次会创建一个新的客户对象 public static Generatorgenerator(){ return new Generator (){ public Customer next(){return new Customer();} }; } } 出纳员 class Teller { private static long counter=1; private final long id=counter++; private Teller(){} public String toString(){return "Teller"+id;} //Teller就仅仅创建了一个public 的generator对象 public static Generator generator=new Generator () { public Teller next() { return new Teller(); } }; }// 出纳员public class BankTeller { public static void serve(Teller t,Customer c) { System.out.println(t+" serves "+c); } public static void main(String[] args) { Random random=new Random(47); //生成客户对象15个 Queue line=new LinkedList (); Generators.fill(line, Customer.generator(), 15); //出纳员对象4个 List tellers=new ArrayList (); Generators.fill(tellers, Teller.generator, 4); for(Customer c:line) serve(tellers.get(random.nextInt(tellers.size())),c); }} /*output: Teller3 serves Customer1 Teller2 serves Customer2 Teller3 serves Customer3 Teller1 serves Customer4 Teller1 serves Customer5 Teller3 serves Customer6 Teller1 serves Customer7 Teller2 serves Customer8 Teller3 serves Customer9 Teller3 serves Customer10 Teller2 serves Customer11 Teller4 serves Customer12 Teller2 serves Customer13 Teller1 serves Customer14 Teller1 serves Customer15 * *///:~~~