1.没有被引用和没有被使用是两码事。
java
public List<MyConcernFriends> getConcernListByUserId(String userId) { List<MyBlackList> myBlackLists= this.getMyBlackListByUserId(userId); HashMap<String,Boolean> hash = new HashMap<String,Boolean>(); for (MyBlackList black : myBlackLists) { hash.put(black.getBlackUserId(),true); } BSONObject query = new BasicBSONObject(); query.put(MY_CONCERN_FRIENDS.myUserId, userId); DBAccessAPIHelp APIHelp = new DBAccessAPIHelp(); List<String> jsonDataList = APIHelp.getJsonObjects( DBConstant.USER_INFO_SPACE, DBConstant.MY_COCERN_FRIENDS_DATA, query); APIHelp.freeDBConnection(); List<MyConcernFriends> list = new ArrayList<MyConcernFriends>(); for (String json : jsonDataList) { MyConcernFriends myConcernFriends = (MyConcernFriends) JacksonUtil .jsonToBean(json, MyConcernFriends.class); if (hash.get(myConcernFriends.getFrUserId())==null){ list.add(myConcernFriends); } } return list; }
对这一段代码如何做出优化?
尽量的在for里面少创建对象。那么如何在for里面尽量少的创建对象呢?
但是不在这里面创建,又在哪里面创建呢?
比如,在List 里面查询出了一万条数据。那么这一万条数据for循环然后json反序列化变成java bean,最后放在list里面返回出去。如果是一万条数据性能就回很低,要创建一万个对象了
这段代码该如何优化呢?
首先,代码这种编写方式相对来说还是比较清晰的,除了查询Json数据应该封装到DAO层去,不是对性能有极端要求,不建议做过多优化。
但是如果真有必要,提供几个优化思路:
1.1 可以预估取出值的数量,在新建的时候可以调整capacity,甚至调整load factor,以免多次开辟内存空间;
1.2 或者创建一次就直接进行缓存,用触发式的更新机制,避免重复创建;
1.3 用TreeMap替代HashMap,可以略微提升查询性能,其实你这个场景完全可以用Set,可以略微减小内存开销;
1.4 可以把这个List的Id写入到redis或者memcached中去,这样不占用本应用的内存空间。
感觉你自己提的想要1w个对象,却不想创建1w个对象,这感觉自我矛盾的事情,貌似是没有任何办法的。