在我们日常开发中,循环遍历集合是必不可少的操作。
但如果循环层级比较深,循环中套循环,可能会影响代码的执行效率。
反例
:
1 | for(User user: userList) { |
这个例子中有两层循环,如果 userList 和 roleList 数据比较多的话,需要循环遍历很多次,才能获取我们所需要的数据,非常消耗 cpu 资源。
正例
:
1 | Map<Long, List<Role>> roleMap = roleList.stream().collect(Collectors.groupingBy(Role::getId)); |
减少循环次数,最简单的办法是,**把第二层循环的集合变成 map
**,这样可以直接通过 key
,获取想要的 value
数据。
虽说 map 的 key 存在 hash冲突
的情况,但遍历存放数据的链表
或者红黑树
的时间复杂度
,比遍历整个 list 集合要小很多。