为了账号安全,请及时绑定邮箱和手机立即绑定

面试题:一个存有10000个数的list对list中的每一个数+1.如何实现

面试题:一个存有10000个数的list对list中的每一个数+1.如何实现

繁花不似锦 2018-08-01 09:21:47
我当时回答的是使用java8的stream类中的map函数+1.但是看面试官的反应让我确信这不是正确答案。各位会怎么做
查看完整描述

2 回答

?
qq_汪奇_0

TA贡献2条经验 获得超1个赞

我今天也被问到了这个问题。面试官给我的答案是用多线程将List分段并行处理。java1.8中可以通过

list.parallelStream()获取并行流


查看完整回答
反对 回复 2021-04-07
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

Java8 的 Stream 可以并发执行,但 Stream 不会改变原有的 list,只能返回一个新的 list,然后赋值给原来 list 的引用。但是如果 list 是 RandomAccess 的,即底层实现为数组,比如 ArrayList,那么直接使用传统的 for 循环遍历一遍就好,因为对于 RandomAccess 的 List,通过下标访问数组元素的时间复杂度为 O(1),那么遍历一遍的时间复杂度为 O(N),这是一个很优的时间复杂度,而且没有使用额外的空间,空间复杂度为 O(1);
如果不是,比如 LinkedList,那么通过下标获得 list 中对应元素的时间复杂度是 O(N),如果使用之前的方式,那么总的时间复杂度会是 O(N^2),那么推荐创建一个同样大小新的 List,然后遍历原有的 list,把 每个元素+1 的值加入到新的 List中。这个时候时间复杂度是 O(N),空间复杂度也是 O(N)。(当然此时你也可以使用 Stream 来生成一个新的 List


所以我猜测面试官对你的回答不满意,是因为你没有考虑到不同的 List 类型吧。


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 1744 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信