两个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;

}



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

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

其实吧,全部扔数据库,然后调数据的时候join起来就行了

一定要弄的话,主要问题应该是比对key的时候你又for了一次,增加了复杂度

所以,你要么直接把returnMap.entrySet()转成String ,用Sunstring(indexof(key+"="),indexof(",",","));应该能提升效率,
要么每次找到以后就把returnMap对应的键值对删掉,这样后续比对的次数会降低很多,应该也能提升效率

(其他还有什么一直使用的变量放到for外面先实例化,再在for里面调用这种就不说了)