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


相关推荐

  • AD15中PCB设置NET CLASS规则

    AD15中PCB设置NET CLASS规则1,执行菜单命令设计-类或者快捷命令DC计入如下界面2,右键新建一个类类)X*O-K,M9}0C6v3,吧电源和GND网络都加载到右边,PWR类创建完毕 4,这时候在规则里面就可对这个类进行调用和约束…

    2022年7月16日
    17
  • java解析XML为对象「建议收藏」

    java解析XML为对象「建议收藏」详解Java解析XML的四种方法http://developer.51cto.com 2009-03-3113:12 cnlw1985 javaeye 我要评论()XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。
     
    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献

    2022年5月4日
    40
  • CSS3 transition的使用

    CSS3 transition的使用一、CSS3中transition的定义transition:propertydurationtiming-functiondelay;transition属性是一个简写属性,主要用于设置四个过渡属性: 值描述transition-property规定设置过渡效果的CSS属性的名称。transitio

    2022年7月13日
    20
  • 语音检测_自适应遗传算法

    语音检测_自适应遗传算法自适应回声消除算法欢迎留言交流AEC算法早期用在Voip,电话这些场景中,自从智能设备诞生后,智能语音设备也要消除自身的音源,这些音源包括音乐或者TTS机器合成声音。本文基于开源算法阐述AEC的原理和实现,基于WebRTC和speex两种算法,文末会附上两种算法的matlab实现。回声消除原理回声消除的基本原理是使用一个自适应滤波器对未知的回声信道:ω\omega进行参数辨识,根据扬声器信号与产

    2025年8月22日
    3
  • linux操作系统基础教程_linux教程第五版

    linux操作系统基础教程_linux教程第五版1.Linux入门教程http://c.biancheng.net/cpp/linux/基础教程Linux简介Linux文件管理Linux目录Linux文件权限和访问模式Linux环境变量Linux打印文件和发送邮件Linux管道和过滤器Linux进程…

    2022年10月13日
    4
  • MySQL中MyISAM和InnoDB的索引方式以及区别与选择

    MySQL中MyISAM和InnoDB的索引方式以及区别与选择

    2022年2月12日
    38

发表回复

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

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