Java ArrayList 不服来辩

284 天前
 guguji

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

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

5481 次点击
所在节点    Java
67 条回复
Masoud2023
284 天前
你这个问题应该回学校好好学学数据结构,而不是在这不服来辩
thevita
284 天前
要辩你应该先陈述自己的观点,不应该是问句

ps:
remove(int index) 复杂度 O(N2) 写错了吧。remove(Object o) 才是 O(N^2)
me1onsoda
284 天前
那么数组为什么可以根据索引快速访问到数据?

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

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

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

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

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

© 2021 V2EX