zoukankan      html  css  js  c++  java
  • Java双重循环

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

  • 相关阅读:
    ngx_os_init解析
    cacheline相关优化手段
    std::thread_local
    std::initializer_list<T>
    MySQL group by 注意事项
    MySQL IFNULL函数
    python nginx不同参数压测脚本
    完全卸载oracle11g步骤
    Maven常用命令(转载)
    项目SVN的IP地址发生变化时修改SVN为新的IP地址
  • 原文地址:https://www.cnblogs.com/jishuzhaichen/p/5536779.html
Copyright © 2011-2022 走看看