java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
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有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨的更多相关文章
- PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例
一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉 ...
- Java 8 时间日期库的20个使用演示样例
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- ArcSDE SDK For Java二次开发介绍、演示样例
在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...
- JAVA简单Swing图形界面应用演示样例
JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...
- java并行调度框架封装及演示样例
參考资料: 阿里巴巴开源项目 CobarClient 源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- java 线程、线程池基本应用演示样例代码回想
java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...
随机推荐
- 如何有效地配置基于Spring的应用系统
Spring为应用系统的开发提供了极大的方便,其IoC反向注入(或DI依赖注入)的概念也彻底地改变了旧的编程方式,让我们只需关注如何使用对象,而创建对象交给Spring去完成,即把使用对象和创建对象分 ...
- google地图marker文字label添加js lib
google的地图marker需要使用js开发库,文件并允许使用js库 在JSP页面中需要添加地图引用如: <script src="http://maps.googleapis.co ...
- C语言当中的作用域
在C语言当中,变量的作用域分为两种:全局变量和局部变量. 在所有函数之外声明的变量是全局变量,这些变量可以在整个程序当中被访问: 局部变量是在某一对大括号({})之间生命的变量,这些变量在这对大括号之 ...
- 【刷题 Python Tip】题目1~5
[题目1]just print a+b give you two var a and b, print the value of a+b, just do it!! print (a + b) [题目 ...
- Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black
Prime Ring Problem Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- SQL Server数据恢复——日志备份
太坑了,我把数据给删了 “大坑啊,数据被我误删了.”从事数据库相关工作的过程中,我想应该很多人会有过和我一样的遭遇吧?尤其是在进行update或者delete操作的时候,忘记了where条件.这些毁灭 ...
- Oracle的分页查询语句优化
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一) 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT ...
- C++中数字与字符串之间的转换,别人的,
C++中数字与字符串之间的转换 1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = st ...
- C语言中的数据类型
基本数据类型: int float double char void 派生数据类型: 数据类型修饰符 + 基本数据类型 = 派生数据类型 signed 和 unsigned 类型 unsigned ...
- mysql学习(十)多表查询
多表查询时,要给表名起别名,给字段名其别名(当两个表含有重复字段时) select p.name, c.name, pid from products p, cats c;//得到的结果为笛卡尔乘积 ...