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

//Sets.java
package org.rui.generics.set; import java.util.HashSet;
import java.util.Set;
/**
* 一个Set有用工具
* @author lenovo
*
*/
public class Sets { public static<T> Set<T> union(Set<T> a,Set<T> b)
{
Set<T> result=new HashSet<T>(a);
result.addAll(b);
return result;
} //保留 同样
public static <T> Set<T> intersection(Set<T> a,Set<T> b)
{
Set<T> result=new HashSet<T>(a);
result.retainAll(b);
return result;
}
// 差值 //去掉同样
public static <T> Set<T> difference(Set<T> a,Set<T> b)
{
Set<T> result=new HashSet<T>(a);
result.removeAll(b);
return result;
} //除了交集之外的全部过犹元素
public static <T> Set<T> complement(Set<T> a,Set<T> b)
{
return difference(union(a,b),intersection(a,b));
} public static void main(String[] args) {
Set<String> result=new HashSet<String>();
result.add("a");
result.add("b");
Set<String> result2=new HashSet<String>();
result2.add("b"); Set<String> results=complement(result,result2);
for(String s:results){
System.out.println(s);
}
}
}
//Watercolors.java
package org.rui.generics.set; //水彩画
public enum Watercolors {
ZINC,LEMON_TYLLOW,MEDIUM_YELLOW,DEEP_YELLOW,ORANGE,
BRILLIANT_RED }
//WatercolorSets.java
package org.rui.generics.set; import java.util.EnumSet;
import java.util.Set;
/**
* EnumSet 使用演示样例
* @author lenovo
*
*/
public class WatercolorSets { public static void main(String[] args) {
Set<Watercolors> set1=EnumSet.range(
Watercolors.LEMON_TYLLOW,
Watercolors.ORANGE
); Set<Watercolors> 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.java
package org.rui.generics.set;
import java.lang.reflect.Method;
import java.util.*;
/**
* 我们能够从输出中看到各种关系运算的结果
*
* @author lenovo
*
*/
public class ContainerMethodDifferences {
static Set<String> methodSet(Class<?> type)
{
Set<String> result =new TreeSet<String>();
for(Method m:type.getMethods())
result.add(m.getName()); return result;
} static void interfaces(Class<?> type)
{
System.out.println("interfaces in:"+type.getSimpleName());
List<String> result=new ArrayList<String>();
for(Class<?> c:type.getInterfaces())
result.add(c.getSimpleName());
System.out.println("result:"+result);
} static Set<String> 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<String> 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:Collections
object:[toArray, iterator, remove, containsAll, contains, add, size, clear, isEmpty, retainAll, removeAll]
interfaces in:Set
result:[Collection]
----HashSet-----------------------------
HashSet extends:Set
object:[]
interfaces in:HashSet
result:[Set, Cloneable, Serializable]
----LinkedHashSet-----------------------------
LinkedHashSet extends:HashSet
object:[]
interfaces in:LinkedHashSet
result:[Set, Cloneable, Serializable]
----TreeSet-----------------------------
TreeSet extends:Set
object:[lower, last, higher, descendingIterator, subSet, pollLast, comparator, pollFirst, floor, headSet, ceiling, tailSet, first, descendingSet]
interfaces in:TreeSet
result:[NavigableSet, Cloneable, Serializable]
-----List----------------------------
List extends:Collection
object:[get, set, listIterator, lastIndexOf, indexOf, subList]
interfaces in:List
result:[Collection]
------ArrayList---------------------------
ArrayList extends:List
object:[trimToSize, ensureCapacity]
interfaces in:ArrayList
result:[List, RandomAccess, Cloneable, Serializable]
------LinkedList---------------------------
LinkedList extends:List
object:[offerFirst, removeFirstOccurrence, pop, peekLast, push, descendingIterator, poll, peek, removeFirst, pollLast, getFirst, offerLast, element, removeLast, offer, pollFirst, addLast, addFirst, peekFirst, getLast, removeLastOccurrence]
interfaces in:LinkedList
result:[List, Deque, Cloneable, Serializable]
------Queue---------------------------
Queue extends:Collection
object:[element, offer, poll, peek]
interfaces in:Queue
result:[Collection]
------PriorityQueue---------------------------
PriorityQueue extends:Queue
object:[comparator]
interfaces in:PriorityQueue
result:[Serializable]
Map:[clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values]
------HashMap---------------------------
HashMap extends:Map
object:[]
interfaces in:HashMap
result:[Map, Cloneable, Serializable]
------LinkedHashMap---------------------------
LinkedHashMap extends:HashMap
object:[]
interfaces in:LinkedHashMap
result:[Map]
------TreeMap---------------------------
TreeMap extends:Map
object:[pollLastEntry, firstKey, floorEntry, ceilingEntry, lowerEntry, lastEntry, subMap, tailMap, navigableKeySet, higherEntry, lowerKey, headMap, firstEntry, comparator, descendingKeySet, descendingMap, pollFirstEntry, lastKey, higherKey, floorKey, ceilingKey]
interfaces in:TreeMap
result:[NavigableMap, Cloneable, Serializable]
------SortedMap---------------------------
SortedMap extends:Map
object:[tailMap, firstKey, headMap, comparator, lastKey, subMap]
interfaces in:SortedMap
result:[Map]
*/

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

//Generator.java
package org.rui.generics.anonymity; public interface Generator<T> { //返回泛型的内型对象
T next(); }
//Generators.java
package org.rui.generics.anonymity; import java.util.Collection;
/**
* 利用生成器非常方便的填充一个collection
* @author lenovo
*
*/
public class Generators
{
public static<T> Collection<T> fill(Collection<T> coll,Generator<T> gen,int n)
{
System.out.println("gen.next():"+gen.next());
for(int i=0;i<n;i++)
{
coll.add(gen.next());
}
return coll; }
}
//BankTeller.java
package 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 Generator<Customer> generator(){
return new Generator<Customer>(){
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<Teller> generator=new Generator<Teller>()
{
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<Customer> line=new LinkedList<Customer>();
Generators.fill(line, Customer.generator(), 15); //出纳员对象4个
List<Teller> tellers=new ArrayList<Teller>();
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
* *///:~~~

java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨的更多相关文章

  1. PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

    一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉 ...

  2. Java 8 时间日期库的20个使用演示样例

    除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...

  3. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

  4. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  5. ArcSDE SDK For Java二次开发介绍、演示样例

    在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...

  6. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  7. java并行调度框架封装及演示样例

    參考资料:  阿里巴巴开源项目 CobarClient  源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...

  8. Java连接redis的使用演示样例

    Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...

  9. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

随机推荐

  1. LINUX 暂停、继续进程

    LINUX 暂停.继续进程 kill -STOP 1234 将该进程暂停. 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行 ...

  2. 2014第8周三杂记及web标准学习

    昨天遇到一个问题,安卓中mp3默认打开方式的设置,本来如果直接用播放器来查找文件打开没问题,但不知为何播放器只能在历史文件夹中查找,那么在ES文件管理器中找到对应mp3文件后却总是被默认的ES播放器打 ...

  3. vmware配置安装JDK、Tomcat以及项目部署

    1.安装JDK1.7 JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 安 ...

  4. uva156 By sixleaves

    1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 #include <ma ...

  5. 【LeetCode练习题】Linked List Cycle II

    Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it ...

  6. HDU2842-Chinese Rings(递推+矩阵高速幂)

    pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...

  7. CentOS6.5与XP双系统安装

    因为工作的须要,须要安装一个XP系统和一个CentOS系统.依照在网上找到的一些方法尝试了下,结果都不是非常理想.最后,经过尝试和寻找,找到了一个比較方便的方法. 一.分区 本人的电脑硬盘是500G, ...

  8. [DevExpress]图表开发工具类 ChartUtils

    /// <summary> /// 基于.NET 3.5的Chart工具类;对应的DevExpress版本:12.1.7; /// </summary> public stat ...

  9. 成本卷积报错:CSTPSCEX.explode_sc_cost_flags():40:ORA-01476: 除数为 0

    成本卷积请求:供应链成本累计 - 打印报表 运行后报一下错误: MSG-00000: Rollup ID = 236403MSG-00000: Before CSTPSCEX.supply_chain ...

  10. 观察者模式:猫叫鼠跑人醒(C#)

    本着菜鸟先飞的想法,决定把平时遇到的知识点记录下来,一来是加深理解,二来是方便以后自己查阅.当您看到我这篇文章的时候,觉得代码有哪里不足的地方,请多指教,谢谢.(命名不规范是为了加深自己的理解,多多见 ...