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

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
	 * *///:~~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118599.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月3日 下午9:00
下一篇 2021年12月3日 下午10:00


相关推荐

  • Navicat 导入sql文件时 执行失败 报错问题[通俗易懂]

    Navicat 导入sql文件时 执行失败 报错问题[通俗易懂]在Navicat导出的 或者别的sql文件,在使用Navicat导入时候 出现异常失败报错问题。搜索了很多资料查看,发现是没有解决掉的。最后无意间想起使用 MySql 直接使用命令导入尝试,发现可行的简单粗暴,直接打开你的MySql 登录以后 选择 要导入的数据库use 数据库名称;source 文件的绝对路径;完事 ,坐等~…

    2022年8月19日
    34
  • 红旗 Linux 官方社区_centos桌面图标

    红旗 Linux 官方社区_centos桌面图标参考资料下载:http://www.ctdisk.com/u/665442 计算机和网络技术不断推进着人类的生产力,Linux的诞生又为之带来一场开放与自由的变革。现在,作为亚洲最大、发展最迅速的Linux产品发行商,北京中科红旗软件技术有限公司(红旗软件)引领着这场变革的方向,通过提供高品质的产品和服务,开创全新的计算体验,帮助企业增强其整体竞争力,提高个人工作效率,将用户业务价值和Li

    2022年8月21日
    14
  • webstorm2021.10激活码mac[最新免费获取]

    (webstorm2021.10激活码mac)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    240
  • QQ第三方登录的详细教程

    QQ第三方登录的详细教程这次说一下我自己第一次使用第三方登录的过程 1 我们开始需要在开发者网站上注册 http open com 进入这个网站后点应用接入中的应用接入 因为那个按不动 开始注册 这个注册需要本人手持身份证的照片 然后关于邮箱验证 不知为何我第一次这个邮箱验证邮件发送一直失败 后来第二天才发送成功然后才完成注册 我想应该是因为之前的信息在验证之中吧 2 得到 APPID 这

    2026年3月18日
    2
  • Photoshop CC2019 快捷键壁纸 快捷键大全

    Photoshop CC2019 快捷键壁纸 快捷键大全篇幅较长,建议先收藏,以后有需要了随时可以查看一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具【M】 移动工具【V】 套索、多边形套索、磁性套索【L】 魔棒工具【W】 裁剪工具【C】 切片工具、切片选择工具【K】 喷枪工具【J】 画笔工具、铅笔工具【B】 像皮图章、图案图章【S】 历史画笔工具、艺…

    2026年4月18日
    3
  • 通配符掩码的应用 ACL 访问控制列表

    通配符掩码的应用 ACL 访问控制列表ACL(AccessControlList)访问控制列表在作为数据包的过滤器以及在对指定的某种类型的数据包的优先级,起到了对某些数据包的优先级起到了限制流量的作用,减少了网络的拥塞。通配符掩码作为ACL中重要的一部分,是路由器在进行访问控制时必不可少的重要部件,那么什么是通配符掩码呢?通配符掩码:路由器使用通配符掩码与原地址或者是目标地址一起来分辨匹配的地址范围,在访问控制列表中,将通…

    2022年7月19日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号