使用Map优化双层for循环

借鉴原文 :https://blog.csdn.net/qq_45752401/article/details/109526381

1.双层for循环使用场景

一般我们用于合并两个或者多个对象。因为我们实际需要的数据,被两个或者多个对象所持有,那么我们有时就需要根据共同特征来合并成一个对象。

2.为什么要使用Map替换双层for:

通常情况下,我们对于数据量比较多的时候,如果使用的双层for,会大大降低程序运行效率,对于数据量相对较少,使用双层for嵌套,是察觉不到什么效果的。下面我为大家模拟一万条数据的情况下,合并成一个集合的效率时间

3.准备数据

3.1 User.java

public class User {private String uid;private String name;private String sex;@Overridepublic String toString() {return "User{" +"uid='" + uid + '\'' +", name='" + name + '\'' +", sex='" + sex + '\'' +'}';}public User(String uid, String name) {this.uid = uid;this.name = name;}public User() {}public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

3.2 Person.java

public class Person {private String pid;private String sex;public Person(String pid, String sex) {this.pid = pid;this.sex = sex;}public Person() {}public String getPid() {return pid;}public void setPid(String pid) {this.pid = pid;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Person{" +"pid='" + pid + '\'' +", sex='" + sex + '\'' +'}';}
}

4.测试案例

4.1模拟数据

public class ForUpdate {public static void main(String[] args) {// 模拟一万条数User数据作为测试ArrayList<User> ulist = new ArrayList<>();for (int i = 1; i <= 10000; i++) {ulist.add(new User(i+"","冷言"+i));}// 模拟一万条Person数据作为测试ArrayList<Person> plist = new ArrayList<>();for (int i = 1; i < 10000; i++) {plist.add(new Person(i+"","男"+i));}  }
}

4.2使用双层for合并,展示运行时间

// 获取当前系统时间,单位毫秒值long start = System.currentTimeMillis();// 遍历集合for (User u : ulist) {for (Person p : plist) {// 如果user对象的id等于person对象的idif (u.getUid().equals(p.getPid())){// 需要的数据u.setSex(p.getSex());}}}// 展示当前系统时间,单位毫秒值System.out.println(System.currentTimeMillis()-start);

4.3,使用Map合并,展示运行时间

以下为固定格式,主要是把plist集合的数据封装到Map中:
Map<String,集合内对象> list2Map = 集合名.stream().collect(Collectors.toMap(集合内对象::共同特征, Function.identity()));
实例:以下执行效果是,我想把plist里面我需要的数据,合并到ulist中,他们有个共同特征pid和uid

// 为固定格式,plist需要的数据;Person数据对象;getPid为String类型共同特征Map<String,Person> list2Map = plist.stream().collect(Collectors.toMap(Person::getPid, Function.identity()));// 生成当前系统时间,单位毫秒值long start = System.currentTimeMillis();// 遍历集合for (User user : ulist) {// 通过user的uid,获取map集合的对象Person person = list2Map.get(user.getUid());// 如果获取到if(person != null){// 执行业务代码   我这里是把person里面的sex放置到user的sex中user.setSex(person.getSex());}}// 打印当前系统时间,单位毫秒值System.out.println(System.currentTimeMillis()-start);

从上面来看,我们不难看出,双层for使用的时间,是Map的好多倍。对于数据量少的,这里我就不展示了,自己自行选择。如果是数据量比较大的,使用Map代替双层for

使用Map优化双层for循环相关推荐

  1. java for循环map赋值_Java for循环Map集合优化实现解析

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

  2. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法

    需求:根据主键id来找到对应的数组下标 原本的方法是使用for循环遍历该数组,变量 i 就是下标,问题在于,如果有多重for循环,就会导致性能大大下降,数据也容易出错 因此使用map,让数组(原本是l ...

  3. C++ 退出双层for循环,解决 break、return、continue无法实现问题

    遇到一个情景,采用双层for循环 遍历图像的像素,当找到某一个像素点满足条件时,退出双层for 循环 . 首先了解一下 continue.break.return 各自功能用法: 1.continue ...

  4. python跳出双层for循环的解决方法

    转载 python跳出双层for循环的解决方法 一.问题描述 在二维数组的遍历中,我们经常使用双层for循环.在某些时候,我们并不需要遍历整个二维数组.当条件满足时就应该终止for循环.但是,直接在内 ...

  5. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明。

    基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 西北工业大学编译原理课件第八章 代码优化.p ...

  6. struts2_对Map进行双层迭代

    转自:struts2_对Map进行双层迭代 //后台数据 public String execute() throws Exception {Map<String, List<Produc ...

  7. Java打印三角形(双层for循环)

    Java打印三角形(双层for循环) 1.第一个三角形: 打印样式: 外层for循环控制行数,内层for循环控制"*"的个数 public static void demo01() ...

  8. 编译优化之 - 通用循环优化

    前言   循环是程序中最常见结构,针对循环已有众多的优化技术.循环的优化分为源码上的修改和编译器的优化,编译器能自动执行许多循环优化技术,但对源代码的修改可辅助编译器就行优化处理. 1. 源码上的优化 ...

  9. 回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出

    回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出 目录 回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出 基本介绍 背景回顾 模型介绍 ...

最新文章

  1. 一前端去相亲网站找对象,朋友问:找到了吗?这回复太专业...
  2. 081_html5地理定位
  3. 【CEO赠书】《浪潮之巅》:计算机史上的人间词话
  4. C专家编程--读书笔记十 再论指针
  5. Beginning SDL 2.0(4) YUV加载及渲染
  6. 拥抱.NET Core系列:MemoryCache 缓存域
  7. Python使用传输层安全协议TLS/SSL实现信息加密传输
  8. 12306网站将新增微信通知方式
  9. 渐变,类Flash的菜单
  10. linux查看文件第三行,学习linux第三课!新手必须掌握的linux命令
  11. Eclipse : Android requires compiler compliance level 5.0 or 6.0.
  12. 百度文库下载助手使用说明
  13. 理工科硕士自学ICEM网格划分的思考和感悟
  14. Image Tampering Detection via Semantic Segmentation Network
  15. python sklearn包中的主成分分析_九、Sklearn主成分分析
  16. java对txt记事本文件的读取与写入
  17. Invalid prop: custom validator check failed for prop “pagination“.
  18. 基于蚁群优化算法的特征选择相关文献
  19. 阿里OSS图片持久化,裁切,缩放,格式转换等
  20. 数学符号的英文表达(持续更新中)

热门文章

  1. 3D沙盘房产VR虚拟全景展示越来越流行
  2. 目标检测算法——工业缺陷数据集汇总1(附下载链接)
  3. 跟杨老师学习电磁兼容【16-41】
  4. OpenCV对视频的处理操作
  5. Mac 鼠标和触摸板左键突然失效
  6. Linux下pip离线安装库及其依赖库
  7. 给计算机老师的一封赞美信,给老师的一封信赞美的信
  8. POWER BI 中DAX函数的应用(下篇)
  9. iOS巅峰之已经上架App在appStore上搜索不到的解决方案
  10. python--基础4 (文件操作)