Java ArrayList 不服来辩

2023-07-28 16:48:23 +08:00
 guguji

get(int index) 方法时间复杂度 O(1),如何做的到? - 如果底层是基于数组,那么数组为什么可以根据索引快速访问到数据?

remove(int index) 方法时间复杂度 O(N2) - 如果有大批量的数据在 list 中,且要删除其中一个元素,请问如何优化? - 就基于 ArrayList 来做,不该变成 LinkedList 这种?

5800 次点击
所在节点    Java
67 条回复
Masoud2023
2023-07-28 16:55:32 +08:00
你这个问题应该回学校好好学学数据结构,而不是在这不服来辩
thevita
2023-07-28 16:58:47 +08:00
要辩你应该先陈述自己的观点,不应该是问句

ps:
remove(int index) 复杂度 O(N2) 写错了吧。remove(Object o) 才是 O(N^2)
me1onsoda
2023-07-28 17:00:56 +08:00
那么数组为什么可以根据索引快速访问到数据?

大哥,数组存的数据在内存是连续的,当然可以根据索引来快速检索
thevita
2023-07-28 17:01:29 +08:00
@thevita 屑,说错了,忽略我
emSaVya
2023-07-28 17:04:12 +08:00
这位更是重量级。
gangoogle
2023-07-28 17:04:26 +08:00
数组在内存里面 第一个位置 0x0 第二个 0x2 我想取第 10 个元素直接 0x0+9 不就直接拿到了吗。。。。
xaplux
2023-07-28 17:08:09 +08:00
额,哪来的勇气啊,数组存储是连续的
get 根据下标直接可以寻址了
remove 时间复杂度是 O(n) ,主要是删除一个元素后,其之后的元素要移动啊,如果删除的是最好一个元素,复杂度可以做到 O(1)
a0210077
2023-07-28 17:11:05 +08:00
服,请参考数据结构的数组章节
xaplux
2023-07-28 17:11:24 +08:00
ArrayList 和 LinkedList 的使用场景是不一样的,鱼和熊掌不可兼得,所以要权衡
如果需要频繁删除,那用 LinkedList 相对 ArrayList 要合适
fresco
2023-07-28 17:11:25 +08:00
这不是大学的内容么
PVXLL
2023-07-28 17:12:21 +08:00
震惊~
quicksand
2023-07-28 17:13:53 +08:00
@xaplux 如果对顺序无要求,可以通过将最后一个元素移动到被删除的元素来把复杂度降到 O(1)
Ayanokouji
2023-07-28 17:14:41 +08:00
不会的话,虚心请教不行吗,非要起这么一个标题找喷
hidemyself
2023-07-28 17:15:09 +08:00
我怀疑你是来钓鱼的。
xaplux
2023-07-28 17:18:20 +08:00
@quicksand 是的,看情况没少刷题
Deeymmm
2023-07-28 17:18:41 +08:00
挺好,又 block 一个人
xtreme1
2023-07-28 17:19:02 +08:00
钓的是_, 没的是_
swczxf
2023-07-28 17:21:16 +08:00
这是不是叫民科
Jrue0011
2023-07-28 17:24:05 +08:00
额,看历史发帖和回复也不应该啊
mdn
2023-07-28 17:25:22 +08:00
不服来辩 === 求求大家告诉我答案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960605

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX