首页 技术 正文
技术 2022年11月22日
0 收藏 957 点赞 3,325 浏览 1597 个字

在实际开发中我们常常遇到这样的问题,有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各有一万条数据那么他只会执行两万次,而不是直接循环的一亿次,天啊这比直接循环的效率高了多少倍!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,090
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,567
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,415
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,187
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,823
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,906