paavochan 2017-02-06 08:17 采纳率: 60%
浏览 856
已结题

两个List进行比较后入库速度慢的问题,请指教

问题描述:
做了一个读取文件内容的功能,读取的代码在下方:

读取文件内容方法:
public static List getFileList(){
File file = new File("F:/public.txt");
BufferedReader reader = null;
String lines = null;
int line = 1;
List list = new ArrayList();
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
//一行一行的读取OID文件内容
while((lines = reader.readLine()) != null){
// System.out.println(lines);

            Map<String, String> lineMap = new HashMap<String, String>();

            if(lines!=null && lines.length()-lines.indexOf("=")>1){
                String oid = lines.substring(0, lines.indexOf("=")-1);
                String val = lines.substring(lines.indexOf("=")+2, lines.length());
                lineMap.put(oid, val);
            }

            list.add(lineMap);
            line++;

// if(line%200==0){
// try {
// TimeUnit.SECONDS.sleep(2);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }

        }
        reader.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return list;
}



在上面读取以后,通过比较读取回来的map的key和我的入参map的value进行比较,然后放到一个新的集合里面。

将读取出来的内容进行比较后入库:
public static List<Object> getDeviceByOid(String ip,String tasknum,String sbbh, 
        String manufacturer, String version, String os, String community, Map<String, String> returnMap){

    List<Object> devList = new ArrayList<Object>();
    List<Object> list = ReadFile.getFileList();

    for (Object object : list) {
        Map<String, String> valMap = new HashMap<String, String>();
        valMap.put("TASKNUMBER", tasknum);
        valMap.put("DEVICEID", sbbh);
        //厂家编号
        valMap.put("GQCJBH", manufacturer);
        //型号
        valMap.put("GQJHJSBXH", version);
        //ip
        valMap.put("GQIP", ip);

        Map<String, String> map = (Map<String, String>)object;

        String key = map.keySet().toString();
        String val = map.values().toString();
        if(key != null && val != null && key.contains(" ") == false){
            for(Map.Entry<String, String> entry : returnMap.entrySet()){
                String hkey = entry.getKey();
                String hval = entry.getValue();
                if(key.contains(hval)){
                    valMap.put(hkey, val);
                }

            }
            if(valMap!=null){ 
                devList.add(valMap);
            }
        }
    }

    return devList;

}



目前存在问题:
执行效率太慢,请大神指教!!!
  • 写回答

2条回答 默认 最新

  • oyljerry 2017-02-06 09:32
    关注

    你的map还是遍历去比较,没有利用上它查找快的优势。这样双层循环遍历就会比较慢

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?