Java ArrayList 不服来辩

2023 年 7 月 28 日
 guguji

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

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

9524 次点击
所在节点    Java
68 条回复
Cooky
2023 年 7 月 28 日
看来裁员裁的还不够多
makelove
2023 年 7 月 28 日
你不适合这个职业,趁早转行
zhch602
2023 年 7 月 28 日
这时候就看出来第一门语言学 C 的好处了——不会问出这种弱智问题
Yadomin
2023 年 7 月 29 日
可见科班出身的必要性
idealhs
2023 年 7 月 29 日
跟个弱智一样
IvanLi127
2023 年 7 月 29 日
什么鬼。。。这问题能问得出口?这属于话不会说,代码也不懂写。
Qzier
2023 年 7 月 29 日
培训班出来的?没学过数据结构吗?
NoKey
2023 年 7 月 29 日
为啥不问问神奇的 chatgpt?
learningman
2023 年 7 月 29 日
搞 Java 搞的
kachu673
2023 年 7 月 29 日
原来真有程序员不懂这些东西。。。可见科班的重要性了
4kingRAS
2023 年 7 月 29 日
类似你找车位,数组就是车位有刷编号,那不就 O (1) 找到了吗
kylix
2023 年 7 月 29 日
OP 抛了问题后,匿了
czzhengkw
2023 年 7 月 29 日
https://jifuwei.github.io/

大家去 OP 的博客学习一下吧
githmb
2023 年 7 月 29 日
啊?
ignore
2023 年 7 月 29 日
啊?
VinsonGuo
2023 年 7 月 30 日
@maxssy remove 也不是 On ,因为是对数组整体 arraycopy ,跑 benchmark 性能和 linkedlist 差不多
qwerthhusn
2023 年 7 月 30 日
不要直接喷 OP ,有可能真的答不出来,之前就有司马面试官问到为啥数组能够快速访问数据,我感觉他是想往底层 JVM 指令甚至操作系统,计算机组成原理上问。

Java 字节码中访问数组的指令是 aload (对象引用数组), bload ( boolean 数组),iload ( int 数组)等,就是访问 arr[n]其实只用到一个 JVM 指令,JVM 栈顶是数组的地址和 n 这个 int 数字,然后执行 xload 指令,弹出这两个东西,得到结果,将值压入栈,栈顶就是 arr[n]的值。所以数组元素的访问只有一个 JVM 指令,无论 n 多大。

JVM 是虚拟机,xload 指令由 JVM 实际调用的什么呢?会不会有可能虽然 java 字节码只是一个指令,但是 jvm 解释后传递给下层的时候又变成循环了呢?

我也编不出来了,什么操作系统虚拟内存/物理内存,内存页,甚至到 CPU 指令如何存取内存数据等等,都忘光了。反正就是从高层到底层,访问 arr[n]不会随着 n 变大出现时间增长。
good1uck
2023 年 7 月 30 日
很多人答不上技术问题
然后就挑 op 的标题态度问题

同样的问题问在 stackoverflow
你们觉得会有这么多事 b 跳出来教育人么
iBugOne
2023 年 7 月 30 日
@good1uck
很多人提不出好的技术问题
然后就在标题里加“不服来辩”

同样的标题发在 Stack Overflow
你们觉得会有事 b 来理你吗
chaosz
2023 年 7 月 30 日
钓鱼的吧

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

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

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

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

© 2021 V2EX