在我们日常开发中,循环遍历集合是必不可少的操作。
但如果循环层级比较深,循环中套循环,可能会影响代码的执行效率。
反例:
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 集合要小很多。