一、利用Generic方法参数,对两个集合进行并,交,差,并-交

1、union 并:1》在方法体增加一个集合,构造函数的初始化数据,用方法里传过来的集合。

2》再加一个集合addAll(b)。

2、intersection 交:1>在方法体增加一个集合,构造函数的初始化数据,用方法里传过来的集合。

2>retainAll(b); 同时在俩集合的数。

3、差(补)集:1>在方法体增加一个集合,构造函数的初始化数据,用方法里传过来的集合。

2>removeAll(b); 只在第一个集合的数

4、总集合-交集

下面例子:使用  Generics(通用)<T> Set<T> 方法参数表示法。

EnumSet.range(a,e):返回set的一个集合,EnumSet是Set 的一个实现类。

package net.mindview.util;
import java.util.HashSet;
import java.util.Set;

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> superset, Set<T> subset) {
    Set<T> result = new HashSet<T>(superset);
    result.removeAll(subset);
    return result;
  }
  // 两个并集-两个交集
  public static <T> Set<T> complement(Set<T> a, Set<T> b) {
    return difference(union(a, b), intersection(a, b));
  }
} ///:~

//列举常量
package generics.watercolors;
public enum Alpha {a,b,c,d,e,f}

//使用上面方法的类
package generics;

import generics.watercolors.*;
import java.util.*;
import static net.mindview.util.Print.*;
import static net.mindview.util.Sets.*;
import static generics.watercolors.Alpha.*;

public class WatercolorSets {
public static void main(String[] args) {
Set<Alpha> set1 = EnumSet.range(a,e);
Set<Alpha> set2 = EnumSet.range(c,f);
print("set1: " + set1);
print("set2: " + set2);
print("并: " + union(set1, set2));
Set<Alpha> subset = intersection(set1, set2);
print("交: " + subset);
print("差1: " + difference(set1, subset));
print("差2: " + difference(set2, subset));
print("并-交: " + complement(set1, set2));
}
}

二、两个类(接口)的方法 的差集,好像项目中从没有用过。

各种Conllection 和 Map 类(java.util.),即集合类(袋子类)的方法差集

Collection.class,所有的.class 表示调用这个类入内存,成为Class 的类对象,类的所有方法存在Method table中,这是装入内存的类,运行起来,必须用反射取出它的所有方法。

Class<?>:?表示Class的所有类对象(.class)。


package net.mindview.util;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
//求出集合类的所有方法存入TreeSet中
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;
  }
//求出集合类的实现的所有接口,名字存入ArrayList中
  static void interfaces(Class<?> type) {
    System.out.print("Interfaces in " + type.getSimpleName() + ": ");
    List<String> result = new ArrayList<String>();
    for(Class<?> c : type.getInterfaces())
      result.add(c.getSimpleName());
    System.out.println(result);
  }

//类的连接(实例)变量
  static Set<String> object = methodSet(Object.class);

//类的静态块
  static { object.add("clone"); }

//两个集合类的方法差集
  static void difference(Class<?> superset, Class<?> subset) {
 System.out.print(superset.getSimpleName() +" extends " + subset.getSimpleName() + ", adds: ");
    Set<String> comp = Sets.difference(methodSet(superset), methodSet(subset));
    comp.removeAll(object); // Don't show 'Object' methods
    System.out.println(comp);
    interfaces(superset);
  }
  public static void main(String[] args) {
    System.out.println("Collection: "+methodSet(Collection.class));
    interfaces(Collection.class);
    difference(Set.class, Collection.class);
    difference(HashSet.class, Set.class);
    difference(LinkedHashSet.class, HashSet.class);
    difference(TreeSet.class, Set.class);
    difference(List.class, Collection.class);
    difference(ArrayList.class, List.class);
    difference(LinkedList.class, List.class);
    difference(Queue.class, Collection.class);
    difference(PriorityQueue.class, Queue.class);
    System.out.println("Map: " + methodSet(Map.class));
    difference(HashMap.class, Map.class);
    difference(LinkedHashMap.class, HashMap.class);
    difference(SortedMap.class, Map.class);
    difference(TreeMap.class, Map.class);
  }
} ///:~

Generics的方法参数,Set 两集合进行并、交、差相关推荐

  1. $emit传递多个参数_10年架构师深解java核心技术:方法参数+对象构造,确定不学?...

    方法参数 首先回顾一下在程序设计语言中有关参数传递给方法(或函数)的一些专业术语.值调用(call by value)表示方法接收的是调用者提供的值.而引用调用(call by reference)表 ...

  2. 方法参数的值调用+引用调用+深浅拷贝

    [0]README 0.1)本文描述+源代码均 转自 core java volume 1, 旨在理清值调用+引用调用: [1]参数传递给方法的专业术语: 1.1)值调用:它表示方法接收的是调用者提供 ...

  3. vue 获取请求url_vue 获取url里参数的两种方法小结

    我就废话不多说了,大家还是直接看代码吧~ 第一种: const query = Qs.parse(location.search.substring(1)) let passport = query. ...

  4. java重定向url有参数吗_JavaScript重定向URL参数的两种方法小结

    这篇文章主要介绍的是JavaScript重定向URL参数的两种方法,下面话不多说,直接看示例代码. 一.字符拼接形式 function setUri(para, val) { var strNewUr ...

  5. Java求两集合中元素交集的四种方法对比总结

    hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑 ...

  6. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换

    一.集合的相关应用 1.1 将一个集合加到另一个集合上 boolean addAll(Collection c) 将给定集合中的所有元素添加到当前集合中.调用方法之后只要c1集合发生变化就返回true ...

  7. list转map stream_advancedday10可变参数不可变集合及Stream流

    可变参数 可变参数指的是,方法参数的个数可以发生改变.但是其本质是一个数组,在方法把可变参数当做数组来使用就可以了. //可变参数的格式:数据类型...参数名public static void 方法 ...

  8. bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 顺便再给大家推荐一套Spring ...

  9. java新特性-函数式接口-作为方法参数-作为方法的返回值-常用函数式接口-Supplier-Consumer-Predicate-Function

    文章目录 函数式接口 概念 函数式接口作为方法参数 函数式接口作为方法的返回值 常用函数式接口 Supplier接口 常用函数式接口 Consumer 函数式接口之 Predicate接口 常用接口之 ...

最新文章

  1. js 适配手机端屏幕字体大小
  2. matlab fsolve()函数的使用
  3. python 笛卡尔积,排列,组合
  4. SectionList的使用
  5. Linux系统调用-- mount/umount函数详解
  6. kernel 3.10内核源码分析--中断--中断和异常返回流程
  7. 【Python web 开发】viewset 实现商品详情页的接口
  8. vb隐藏指定程序系统托盘图标_Windows环境设置系统托盘图标默认显示
  9. 自动驾驶——SimpleNet的学习笔记
  10. sklearn.metrics —— 混淆矩阵及其绘制、Accuracy/Precision/Recall/F1-score
  11. Oracle中用于发送邮件的存储过程
  12. 16s扩增子 qiime2 实战
  13. unity3D制作拼图游戏
  14. Pycharm环境下调用Qt desinger 常见问题以及解决方法
  15. 骨传导耳机损伤大脑?具有不伤耳优点的骨传导耳机了解一下
  16. MQTT——java简单测试(二)
  17. 弘辽科技:淘宝狂欢大促怎么取消?要怎么做活动?
  18. AXI Quad SPI读写Flash做远程升级
  19. QGIS 1. qgis的下载和安装(Windows和macOS)
  20. 狂甩4大必杀技,乐视曲面分体超4忒狠了!

热门文章

  1. eclipse插件 properties Editor离线安装
  2. git切换远程分支和tag操作
  3. ios系统下微信小程序支付宝小程序fixed定位失效
  4. 命令执行漏洞 java_白帽子挖洞—命令执行(Commnd Execution)篇
  5. 51单片机模拟I2C程序
  6. css怎么制作自己头像跳跃,如何用CSS制作闪烁的箭头
  7. error :dereferencing pointer to incomplete type解决办法
  8. 神级程序员288行代码用C语言打造炫酷的推箱子小游戏!
  9. Tableau表格取消合并单元格
  10. linux升级isc bind,bind版本升级的调查流程