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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm界面颜色设置_Excel护眼色打印

    pycharm界面颜色设置_Excel护眼色打印首先打开菜单file下的setting设置:然后找到editor中的general3.然后点击图标最上面的saveas创建第二个默认设置:4.接下来再下面的对话框中找到defaulttext并将background和foreground对话框打勾:5.对background进行颜色设定:6.对foreground进行设计:7.最后点击最下面的apply和ok即…

    2022年8月26日
    9
  • JDK1.8 ArrayList 扩容详解

    JDK1.8 ArrayList 扩容详解arraylist这个数据结构比较简单,总体来说,arraylist底层结构是数组,他的很多方法都是从数组上面演变而来的,下面分析下arraylist的扩容机制,每次在add()一个元素时,arraylist都需要对这个list的容量进行一个判断。如果容量够,直接添加,否则需要进行扩容。在1.8arraylist这个类中,扩容调用的是grow()方法,通过grow()方法中调用的Array…

    2022年5月22日
    41
  • python七夕表白代码(转载)_情人节图片唯美浪漫

    python七夕表白代码(转载)_情人节图片唯美浪漫七夕,最浪漫的Python代码送给陷入爱河的Python男同胞image.gif​三句话情书,我们听过。如何用python写一段浪漫的代码?可以是简短有韵味的情书式,也欢迎冗长而效果拔群的万行代码,我这在下面例举一些,还有其它思路的欢迎补充。千万千万别用代码表白,因为Python已经告诉你了:’she’isnot’yours’True千万别用Python表白,实在太扎心了:七夕,最浪漫的Py…

    2022年9月24日
    3
  • B样条曲线拟合原理「建议收藏」

    B样条曲线拟合原理「建议收藏」1.与贝塞尔曲线对比B样条曲线是在Bezier曲线基础上发展起来的一类曲线,它克服了Bezier曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。2.二次B样条2.1参数方程已知三个平面离散点P0、P1、P2,由这三点可以定义二次抛物线段,其参数矢量方程形式为:二次B样条曲线参数方程的矩阵形式为:对比着看,

    2022年6月18日
    66
  • 将本地依赖上传私库

    将本地依赖上传私库将本地依赖上传私库查看是否上传成功提示:如果本地依赖升级了,尽可能通过升级版本号的方式重新上传。如果依旧是原来版本,虽重新上传了,但私库存在缓存,可能使用的仍是缓存中的旧版本。…

    2022年7月18日
    16
  • linux流量分析「建议收藏」

    linux流量分析「建议收藏」目录1.案例分析2.命令详解1.案例分析查看流量端口号sudoiftop-i-Pn-&gt;显示主机ip和主机名 N-&gt;显示端口号或者端口服务名称 P-&gt;暂定或者继续根据端口号查询进程netstat-nap|grepport查看进程信息:ps-aux|greppid2.命令详解2.1iftop2.1.1运行if…

    2022年5月8日
    67

发表回复

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

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