添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
英俊的猴子  ·  Linux 中C/C++ search ...·  2 月前    · 
高兴的丝瓜  ·  Asp.Net Core ...·  1 年前    · 

Java求两集合中元素交集的四种方法对比分析

作者:java技术媛

这篇文章主要介绍了Java求两集合中元素交集的四种方法对比总结,四种求集合中元素交集的方法,按照在处理大量数据的效率来看,使用map集合的特性的方法效率最高,之后是使用Java流的方法,其次是使用for循环和迭代器的方法,需要的朋友可以参考下

最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑到程序运行的时间消耗等问题,

所以写了四种求集合元素交集的方法 今天这篇文章主要是来记录对比一下,这四种方法使用起来的效率问题,

方法一,求两个集合的交集【普通for循环】

这种方法是最普通的进行for循环比较的方法。利用集合的contains方法,来对比第二个集合中是否存在相同的元素的方法,同时将交集结果返回。

代码示例如下:

* 方法1,求两个集合的交集 * @param arr1 * @param arr2 * @return public List<Object> intersectionForList_1(List<Object> arr1, List<Object> arr2) { long startTime = System.currentTimeMillis(); List<Object> result = new ArrayList<>(); for (Object arr : arr1) { if (arr2.contains(arr)) { result.add(arr); long endTime = System.currentTimeMillis(); log.info("intersectionForList_1:" + (endTime - startTime)); return result;

方法二,求两个集合交集,(迭代器)

这种方法使用的是list集合的迭代器的方法,其实原理和for是一样的,方法的核心也和for循环是一样的,只是外层循环的方法不一样,所以它和上面第一种方法的效果是一样的。

代码示例如下:

* 方法2,求两个集合交集,(迭代器) * @param arr1 * @param arr2 * @return public List<Object> intersectionForList_2(List<Object> arr1, List<Object> arr2) { long startTime = System.currentTimeMillis(); List<Object> resultList = new ArrayList<>(); List<Object> maxList; List<Object> minList; if (arr1.size()>arr2.size()){ maxList = arr1; minList = arr2; }else { maxList = arr2; minList = arr1; Iterator<Object> iterator = maxList.iterator(); while (iterator.hasNext()){ Object next = iterator.next(); if (minList.contains(next)){ resultList.add(next); long endTime = System.currentTimeMillis(); log.info("intersectionForList_2:" + (endTime - startTime)); return resultList;

方法三,求两个集合交集,(map)

这种方法使用的是map的特性,首先将list集合中的元素依次存入一个map中去,然后再以map的get方法来判断是否存在这样的元素。

这种方法的效率最高,在10万条数据的测试下,这种方法耗时仅仅在十几毫秒,而其他方法在将近一百多毫秒。

在百万条数据进行对比处理的时候,使用map特性的方法时间消耗大概在40毫秒左右,但是其他方法要将近10秒钟,

所以在对于大量数据的处理过程中,还是非常建议使用这种方法的。

代码示例如下:

* 方法3,求两个集合交集,(map) * @param arr1 * @param arr2 * @return public List<Object> intersectionForList_3(List<Object> arr1, List<Object> arr2) { long startTime = System.currentTimeMillis(); List<Object> resultList = new ArrayList<>(); Map<String,Object> map = new HashMap<>(); arr1.forEach(a1->{ map.put(a1+"",a1); arr2.forEach(a2->{ Object obj = map.get(a2 + ""); if (obj!=null){ resultList.add(obj); long endTime = System.currentTimeMillis(); log.info("intersectionForList_3:" + (endTime-startTime)); return resultList;

方法四,求两个集合交集,(forEasy)

这种方法使用的是集合的foreasy特性和Java流的特性,使用这种方法可以遍历其中的一个集合,然后再使用contains方法来判断另一个集合中是否存在该集合元素,这种方法的使用效率要优于第一种和第二种方法。

代码示例如下:

* 方法4,求两个集合交集,(forEasy) * @param arr1 * @param arr2 * @return public List<Object> intersectionForList_4(List<Object> arr1, List<Object> arr2){ long startTime = System.currentTimeMillis(); List<Object> resultList = new ArrayList<>(); arr1.stream().forEach(a1->{ if (arr2.contains(a1)){ resultList.add(a1); long endTime = System.currentTimeMillis(); log.info("intersectionForList_4:" + (endTime-startTime)); return resultList;

总结一下以上四种求集合中元素交集的方法,按照在处理大量数据的效率来看,使用map集合的特性的方法效率最高,之后是使用Java流的方法,其次是使用for循环和迭代器的方法,所以在正常情况下,还是推荐使用map的特性来进行集合中元素的对比分析和求交集的。

到此这篇关于Java求两集合中元素交集的四种方法对比总结的文章就介绍到这了,更多相关java求两集合中元素交集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • java如何获取map中value的最大值
    java如何获取map中value的最大值
    2023-05-05
  • JAVA使用JDBC连接oracle数据库的详细过程
    JAVA使用JDBC连接oracle数据库的详细过程
    2023-05-05
  • MyBatis多表查询和注解开发案例详解
    MyBatis多表查询和注解开发案例详解
    2023-05-05
  • @JsonFormat 和 @DateTimeFormat 时间格式化注解(场景示例代码)
    @JsonFormat 和 @DateTimeFormat 时间格式化注解(场景示例代码)
    2023-05-05
  • SpringBoot使用RestTemplate的示例详解
    SpringBoot使用RestTemplate的示例详解
    2023-05-05
  • mybatis和mybatis-plus同时使用的坑
    mybatis和mybatis-plus同时使用的坑
    2023-05-05
  • Java求两集合中元素交集的四种方法对比分析
    Java求两集合中元素交集的四种方法对比分析
    2023-05-05
  • springboot 实现动态刷新配置的详细过程
    springboot 实现动态刷新配置的详细过程
    2023-05-05
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号