背景
今天定位一个接口耗时问题,通过日志定位到在数据库查询完毕后,中间一段逻辑耗时很长有十几秒的样子,发现是循环中使用ArraysList中的contains方法,当循环数量级变得很大时,执行时间变得不可控。
代码示例
// 有5万个门店
List<Store> storeList = storeMapper.selectAll();
// 有十万个用户
List<User> userList = userMapper.selectAll();
// 最坏情况循环5亿次
for (user : userList){
if (storeList.contains(user.getStoreCode())){
doSth();
}
}
1. 原理说明
1.1 ArrayList
ArrayList中

文章探讨了ArrayList的contains()方法在大数据量下耗时问题,通过对比与HashSet的contains()方法,指出HashSet在性能上具有显著优势,特别是在大量数据循环查询时。
最低0.47元/天 解锁文章
1125

被折叠的 条评论
为什么被折叠?



