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

发布于 2022-09-07 07:25:38 字数 70 浏览 10 评论 0

我当时回答的是使用java8的stream类中的map函数+1.
但是看面试官的反应让我确信这不是正确答案。各位会怎么做

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

[旋木] 2022-09-14 07:25:38

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


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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文