【java】Collection求交集
来源:互联网 发布:淘宝有异地客服吗 编辑:程序博客网 时间:2024/06/05 18:37
转载请注明出处:http://blog.csdn.net/u012250875/article/details/78201566
一、使用Collection接口定义的方法
//Collection接口中定义的boolean retainAll(Collection<?> c);
调用方式如下:
//使用如下:public static void main(String[] args) { List<Integer> listdata1 = new ArrayList<>(Arrays.asList(new Integer[]{1,5,7})); List<Integer> listdata2 = new ArrayList<>(Arrays.asList(new Integer[]{1,3,5})); System.out.println("listdata1和listdata2求完交集后listdata1中元素发生改变了,因此boolean值为:"+listdata1.retainAll(listdata2)); System.out.println("listdata1和listdata2求交集结果保存在listdata1中,交集结果如下:"+listdata1); List<Integer> listdata3 = new ArrayList<>(Arrays.asList(new Integer[]{1,5,7})); List<Integer> listdata4 = new ArrayList<>(Arrays.asList(new Integer[]{1,5,7})); System.out.println("listdata3和listdata4求完交集后listdata3中的元素并未改变,因此boolean值为:"+listdata1.retainAll(listdata2)); System.out.println("listdata3和listdata4求交集结果保存在listdata3中,交集结果如下:"+listdata3);}
执行结果如下
listdata1和listdata2求完交集后listdata1中元素发生改变了,因此boolean值为:truelistdata1和listdata2求交集结果保存在listdata1中,交集结果如下:[1, 5]listdata3和listdata4求完交集后listdata3中的元素并未改变,因此boolean值为:falselistdata3和listdata4求交集结果保存在listdata3中,交集结果如下:[1, 5, 7]
特别注意:
retainAll方法返回的boolean值表示retainAll调用者(listdata1和listdata3)中元素是否发生变化了,而与两个集合是否存在交集无关,判断两个集合是否存在交集可以判断retainAll调用后调用者的size大小是否为0(listdata1.size(),listdata3.size()),为0表示无交集。
二、封装求交集的工具方法
/** * @author puyf * @Description:集合类求交集 * @param datas * @return */ public static <T,K extends Collection<? extends T>> List<T> intersection(Collection<K> datas){ List<T> result = new ArrayList<>(); Iterator<K> it = datas.iterator(); if(it.hasNext()){ K copy = it.next(); if(copy!=null){ result = new ArrayList<>(copy); for (K k : datas) { result.retainAll(k); } } } return result; } /** * @author puyf * @Description:集合类求交集 * @param datas * @return */ public static <T,K extends Collection<? extends T>> List<T> intersection(K...datas){ return intersection(Arrays.asList(datas)); }
封装时,入参采用规定为集合类的集合或集合类可变参数,这样可以扩大了入参范围,凡是满足Collection<Collection<T>>皆可作为入参,采用Collection<? extends T>则允许入参的泛型只要继承关系即可不用严格一致
使用如下:
public static void main(String[] args) { List<Number> listdata1 = new ArrayList<>(Arrays.asList(new Integer[]{1,5,7})); List<Integer> listdata2 = new ArrayList<>(Arrays.asList(new Integer[]{1,3,5})); Set<Integer> setdata = new HashSet<>(Arrays.asList(new Integer[]{1,3,9})); System.out.println("listdata1、listdata2、setdata三者求交集,交集结果 为:"+intersection(listdata1,listdata2,setdata));}
执行结果:
listdata1、listdata2、setdata三者求交集,交集结果为:[1, 5, 7]
上述调用中可体现支持set和list混用,支持泛型继承(Integer继承自Number)
更多:Collection常用操作(点击查看)
阅读全文
0 0
- 【java】Collection求交集
- 求两个Collection的交集
- [Java]求字符串的交集
- java字符串求交集算法
- 求交集
- 求交集
- JAVA集合类List求交集
- Java两个list求交集的方法
- java求集合交集和并集
- JAVA集合类List求交集
- java Set 求交集 并集差集
- Java求交集和并集
- java 之求交集并集
- java求两个集合的交集和并集
- java求两个集合的交集和并集
- Java 两个有序集合 求交集 差集
- java求两个数组的并集、交集、差集
- java集合运算:求交集,并集,集合差
- 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题
- linux下测试磁盘的读写IO速度
- 1044. 火星数字(20)
- 八大算法 JAVA
- Android4.0 Telephony应用层详解
- 【java】Collection求交集
- Ubuntu16.04 禁止客人会话(Disable guest session)
- 基于深度学习的验证码自动识别(caffe)
- angular-resource的url转义问题
- UE4的AI学习(1)——基本概念
- touch
- protoc 生成C++代码
- Could not open the editor: Invalid thread access报错
- tensorflow实现迁移学习实例