这篇文章主要介绍了Java for循环Map集合优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在《for循环实战性能优化》中提出了五种提升for循环性能的优化策略,这次我们在其中嵌套循环优化小循环驱动大循环的基础上,借助Map集合高效的查询性能来优化嵌套for循环。

如果小循环和大循环的集合元素数量分别为M和N,则双层For循环的循环次数是M*N,随着M和N的增长,对性能的影响越来越大。因此,本文考虑进一步优化,使得循环次数变为M+N。利用下面的代码来模拟测试两种情况的性能:

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.function.Function;

import java.util.stream.Collectors;

public class ForUpdate {

public static void main(String[] args) {

// for (int i = 0; i < 10000; i += 10) {

// loopGivenNum(i);

// }

for (int i = 10000; i < 100000; i += 10000) {

loopGivenNum(i);

}

System.out.println("----- done -----");

}

private static void loopGivenNum(int i) {

List smallLoop = getLoopList(i);

List bigLoop = getLoopList(2 * i);

long doByForTimes = doByFor(bigLoop,smallLoop);

long doByMapTimes = doByMap(bigLoop,smallLoop);

System.out.println("size " + i + ": " + doByForTimes + "," + doByMapTimes);

}

/**

* 获取循环变量

* @param size 循环变量元素个数

*/

private static List getLoopList(int size) {

List list = new ArrayList<>();

for (int i = 0; i < size; i++) {

list.add(String.valueOf(i));

}

return list;

}

private static long doByFor(List bigLoop,List smallLoop) {

long startTime = System.currentTimeMillis();

for (String str1 : smallLoop) {

for (String str2 : bigLoop) {

if (str1.equals(str2)) {

continue;

}

}

}

return System.currentTimeMillis() - startTime;

}

/**

* 使用 Map 优化

* @param bigLoop

* @param smallLoop

*/

private static long doByMap(List bigLoop,List smallLoop) {

long startTime = System.currentTimeMillis();

// 转换成map

Map loopMap = bigLoop.stream().collect(Collectors.toMap(k -> k,Function.identity()));

System.out.println(loopMap.size());

for (String str1 : smallLoop) {

if (loopMap.containsKey(str1)) {

continue;

}

}

return System.currentTimeMillis() - startTime;

}

}

输出结果:

size 10000: 756,97

size 20000: 3091,8

size 30000: 4342,7

size 40000: 8848,7

size 50000: 16317,7

size 60000: 31652,7

size 70000: 37078,7

由此可见,数据量越大嵌套For循环执行时间越长,而使用Map后,纵使数据量增长到了20w,执行时间也维持在7ms左右。数据量小的时候,执行结果就不再贴出来了。

结论:使用Map优化后的方法执行的效率比嵌套循环提高了很多很多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

java for循环map赋值_Java for循环Map集合优化实现解析相关推荐

  1. java map赋值_java 中的map怎么没有办法赋值?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package cn.jado.framework.util; import java.io.BufferedReader; import java.io ...

  2. java 循环map 优雅写法_Java for循环Map集合优化实现解析

    这篇文章主要介绍了java for循环map集合优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在<for循环实战性能优化> ...

  3. java foreach赋值_Java foreach循环使用详解[转]

    本文转自码农网 本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环, ...

  4. java用for循环修改密码_Java for循环的几种用法分析

    J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...

  5. java 动态给属性赋值_java中为实体对象的动态属性赋值

    慕勒3428872 下面是User类:import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;publ ...

  6. java 给static变量赋值_java static变量可以赋值吗?

    java static变量可以赋值吗? 可以赋值的.static的主要作用是静态成员,指该变量的实例在内存中之存放一次.赋值是可以随便改的. java中static关键字 static是java中非常 ...

  7. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  8. java循环遍历队列_java实现循环队列

    java实现循环队列 循环队列的优点 普通队列出队操作开销大:在出队操作时,索引为0后面的所有元素,都需要往前移动一位,元素越多,消耗的时间也越多,时间复杂度为O(N). 循环队列的逻辑: 1.当元素 ...

  9. java循环左一_java实现循环左移和右移的简单算法

    java实现循环左移和右移的简单算法 byte a=112,用程序实现,将其循环左移三位和右移三位. 112的二进制原码:0111 0000 112循环左移3位后的二进制码:1000 0011 112 ...

最新文章

  1. TEASOFT软件 | 动作帮助信息定义语法
  2. 程序员必须知道的10大基础实用算法及其讲解
  3. 百度机器人对战人类最强大脑,赢在了小数点后第二位
  4. ASP.NET经典How to do文章汇总
  5. android studio m1,Android Studio 4.0发布 为Android 11做好准备
  6. CentOS8下安装docker
  7. 机器学习-分类之多层感知机原理及实战
  8. 【Java】京东面试:说说MySQL的架构体系
  9. linux内核--设备驱动程序(学习笔记)
  10. iOS应用支持IPV6,就那点事儿
  11. obj模型 vue_Vue各种各样的模型库 Cornucopia 3D for Vue
  12. Charles 手机https抓包
  13. 关于alfa无线设备
  14. 【Excel 教程系列第 16 篇】打印 Excel 表格时,如何设置每页都有表头
  15. 华为2288v3安装linux系统,华为RH2288 V3怎么装系统
  16. 数字功放和模拟功放差异介绍
  17. 淘宝双十一自动化领喵币python脚本
  18. Windows10官网下载与安装U盘的制作
  19. 爬虫—dy直播各个类别下直播数据
  20. 大学计算机专业游戏本推荐,选这几款就对了!大学生笔记本电脑盘点推荐

热门文章

  1. java五子棋托管_精典控制台五子棋源码
  2. 给公众号文章插入微附件,粉丝可直接点击下载
  3. HOW DO WE GET FIRE?
  4. 如何为VMware vcenter server的网卡eth0配置静态IP?
  5. 一种基于Myers‘diff算法的文本比对工具的实现
  6. WebGL(Threejs)工程师与三维设计师沟通注意事项
  7. JAVA自定义异常处理
  8. Java的instanceof关键字
  9. 记程序员兼职打打小怪以来的体验
  10. Redhat 8使用非官方源修复漏洞及关键案例分享