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. 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问

    记录一个耽误30分钟的一个坑: 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问 报404错误

  2. jquery $ dollar符号用法总结

    参考:https://github.com/chyingp/blog/blob/master/jquery/jQuery%E6%BA%90%E7%A0%81-%E7%BE%8E%E5%85%83$%E ...

  3. lostash 正则

     (?:\s+?)  0个或者多个空格

  4. VC++自绘界面

    // MySkinDlg.cpp : implementation file // #include "stdafx.h" #include "MySkin.h" ...

  5. Android的数据存储方式(转)

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  6. 将常见对象转换成json字符串

    public class JsonUtil { public static String objectTojson(Object obj) { StringBuilder json = new Str ...

  7. Web 开发中 9 个有用的提示和技巧

    在本文中,我们给出 9 个有用的 HTML.CSS 和 JavaScript 的技巧和提示,可能在做 Web 开发中经常会需要用到的,其中有几个是关于 HTML5 和 CSS3 的,如果你是一个前端开 ...

  8. C#l连接OPC进行数据交互

    步骤 :引用 OPCNETAPI.DLL&&OPCNETAPI.COM.DLL 1.查询服务器      2. 连接服务器  3. 读取数据     4.写入数据 1.查询服务器 :根 ...

  9. 使用XmlReader读取xml文件之二

    在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...

  10. log4net自定义扩展及配置说明

    log4net文件保存配置我就不说太多了,网上一大把的,数据库配置其实网上也有,只是我第一次按照网上的配置没有跑通,我就说下数据库配置需要注意的地方吧. 下面是一个log4net的数据库代码配置 pu ...