在实际开发中我们常常遇到这样的问题,有A、B两个集合,这两个集合的某一个字段是相同的,要把A集合和B进行匹配,然后把A的值赋值给B例如:

//上传图片
List<MultipartFile> A=multipartRequest.getFiles("fileName");
List<MultipartFile> C=new ArrayList<MultipartFile>();
List<TQuestionInfo> B=questionInfoService.getTaskList(taskUser.getTaskCode());
for (TQuestionInfo q :B) {
for (MultipartFile t : A) {
if(q.getQuestionNum().equals(t.getOriginalFilename())){
C.add(t);
}

q.setTTaskQuestionUserPic(C);
}
这样是对但是这样处理有个很严重的问题,这样循环是N*N的,意思是如果A有一万条数据B有一万条数据那么这个循环会循环一亿次,如果A和B各有十万条数据那结果我就不敢想象。

对于这样的情况我选择了封装一个集合,比如说把A集合封装为Map <String,<MultipartFile>>  然后循环B集合 用相同的字段当做键值来取例如:

//封装为Map

public Map<String,List<TTaskQuestionUserPic>> getTaskQuetionUserMapPic(List<TTaskQuestionUserPic> list){
Map<String,List<TTaskQuestionUserPic>> map = new HashMap<String, List<TTaskQuestionUserPic>>();
List<TTaskQuestionUserPic> childList=null;
Iterator<TTaskQuestionUserPic> it=list.iterator();
TTaskQuestionUserPic info =null;
while(it.hasNext()){
info=it.next();
childList=map.get(info.getTaskQuestionUserCode());
if(childList==null){
childList=new ArrayList<TTaskQuestionUserPic>();
map.put(info.getTaskQuestionUserCode(),childList);
}
childList.add(info);
}
return map;
}

//从Map里面取出值

for (TTaskQuestionUser q : questionUserList) {
List<TTaskQuestionUserPic> list= map.get(q.getTaskQuestionUserCode());
if(EmptyUtils.isNotEmpty(list))
q.setPicList(list);
TQuestionInfo questionInfo=getQuestionMap.get(q.getQuestionNum());
q.setStem(questionInfo.getStem());
q.setQuestionAnalyze(questionInfo.getQuestionAnalyze());
}
taskUser.setQuestionUserList(questionUserList);

这样做看似很繁琐但是最重要的一点它的执行的效率比直接循环两个集合的提高了很多很多。因为这样处理它只是循环两个集合就是说A和B各有一万条数据那么他只会执行两万次,而不是直接循环的一亿次,天啊这比直接循环的效率高了多少倍!

Java双重循环的更多相关文章

  1. java基础08 双重循环打印图形

    public class Double01 { /** * 若有3个班级各4名学员参赛, * 如何计算每个班级参赛学员的平均分? */ public static void main(String[] ...

  2. java08双重循环打印图形

    // 九九乘法表 外层循环每执行一次,内层循环执行一遍 for (int i = 1; i <= 9; i++) { // 外层控制的是行数 for (int j = 1; j <= i; ...

  3. 输出简单图形(StringBuilder代替双重循环)

    在有些题目中打印简单图形必须使用StringBuilder或者StringBuffer,否则会运行超时(用String都会超时). 因为在题目的要求中说到输入的n是小于1000的,用双重循环就会超时, ...

  4. 第二周:Java For循环方法简介

    1.for循环的作用 Java当中循环的意思就是让Java程序重复地执行某些语句.在程序设计时,常常需要处理大量的重复动作, 采用循环结构可以降低程序书写的长度和复杂度可使复杂问题简单化,提高程序的可 ...

  5. [Java基础]循环结构3

    [Java基础]循环结构3 break 与 continue 中断循环... /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:BreakTest.java 编写时间:2016/6 ...

  6. [java基础]循环结构2

    [java基础]循环结构2 写了几个循环结构练习~记录一下~~ 1:99乘法表 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:GameForFor.java 编写时间:2016 ...

  7. [java基础]循环结构1

    [java基础]循环结构1 循环结构:for循环,while循环,do_while循环在,增强型for循环 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:WhileTest.j ...

  8. repeater标签双重循环的使用

    在网站开发中,.NET中的repeater标签几乎是笔者首选,也是唯一一个不会生成多余元素的标签,所有样式都是自定义的,这点类似 struts中的<s:iterator/>标签. 在日常编 ...

  9. java 双重检查模式

    java 双重检查模式 在并发环境下 兼顾安全和效率 成例(Idiom)是一种代码层次上的模式,是在比设计模式的层次更具体的层次上的代码技巧.成例往往与编程语言密切相关.双重检查成例(Double C ...

随机推荐

  1. Log4j讲解

    讲解 通常,我们写代码的过程中,免不了要输出各种调试信息.在没有使用任何日志工具之前,都会使用 System.out.println 来做到. 这么做直观有效,但是有一系列的缺点:1. 不知道这句话是 ...

  2. 一文详解MySQL如何同时自增自减多个字段

    本文将带大家聊一下如何同时自增自减多个字段 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础入门-mysql教程-数据库实战(MySQL基础+MySQL高级+MySQL ...

  3. HashMap实现原理一步一步分析(1-put方法源码整体过程)

    各位同学大家好, 今天给大家分享一下HashMap内部的实现原理, 这一块也是在面试过程当中基础部分被问得比较多的一部分. 想要搞清楚HashMap内部的实现原理,我们需要先对一些基本的概念有一些了解 ...

  4. netcore3.1 webapi使用signalR

    前言 今天尝试了一下signalR,感觉还不错,因为暂时用不到,就写一篇博文来记录搭建过程,以免以后给忘了,基于官方文档写的,不过官方没有webapi调用例子,就自己写了一下,大神勿喷 使用 1.创建 ...

  5. Django(19)QuerySet API

    前言 我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作.其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager ...

  6. 普里姆算法(Prim)邻接矩阵法

    算法代码 C#代码 using System; namespace Prim { class Program { static void Main(string[] args) { int numbe ...

  7. [BD] 阿里云部署hadoop集群

    安装方式 rpm包安装:下载rpm文件后离线装,安装过程中会下载相应依赖 bin文件安装:在线安装 tar包安装 步骤 下载安装文件:买香港机器,按量付费,传到windows电脑 购买三台,按需付费, ...

  8. [Java] GUI编程基础 绘图

    库 swing awt 过程 创建窗口JFrame JFrame-->MenuBar-->Container 屏幕坐标系:左上角为原点 Graphics2D Main.java 1 imp ...

  9. CentOS 8 配置 VNC Server

    CentOS 8 配置 VNC Server 2020-12-31 | 标签: centos, vnc 前言 CentOS 8 配置 VNC Server, 使用户可以远程访问,本例介绍安装和配置流程 ...

  10. BUUCTF(九) [ACTF2020 新生赛]Exec 1

    baidu.com & ls .. baidu.com & ls ../.. baidu.com & ls ../../.. 发现flag 查看 baidu.com & ...