最近写java代码学到的一些point,主要是我在公司实习的时候,自己碰到的一些问题,总结一下。会持续更新。
问题:平常写java的都经常会有功能点:service.getElementByID(id),以前我在写的时候,比如从前端接收到对象的list-》根据list中某个对象的id查询数据库的某张表的其他属性name-》第一反应是直接for循环遍历获取对象id,然后根据id调用service中的getnameByID方法。
这个做法实际上是可以的,但是如果数据量很大的情况下,多次访问数据库IO消耗巨大。 复制代码
解决:先select * from 数据中的某张表A,获取全部需要的数据,然后把你需要查找的一列name与ID一一对应存入map。然后for循环list中的id时,直接从map中查找。这样操作的话就相当于只访问了一次数据库。同时因为map的get操作的时间复杂度在理想的情况下为O(1)。
//定义map list为一次从数据库获取所有数据 Map<String,Object> map = new HashMap<>(); List<Object> lists = service.findAll(); if(lists!=null && !lists.isEmpty()){ //将list中所有数据存入map lists.forEach(bean->{ map.put(bean.getID(),bean); }); } //在操作的时候,如果map中存在对应的key,直接get if(map.containsKey(bean.getID()) ){ System.out.println(bean.getName()); } 复制代码