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 条回复
Cooky
2023-07-28 20:04:06 +08:00
看来裁员裁的还不够多
makelove
2023-07-28 20:24:14 +08:00
你不适合这个职业,趁早转行
zhch602
2023-07-28 23:25:16 +08:00
这时候就看出来第一门语言学 C 的好处了——不会问出这种弱智问题
Yadomin
2023-07-29 01:09:45 +08:00
可见科班出身的必要性
idealhs
2023-07-29 01:27:57 +08:00
跟个弱智一样
IvanLi127
2023-07-29 01:45:36 +08:00
什么鬼。。。这问题能问得出口?这属于话不会说,代码也不懂写。
Qzier
2023-07-29 03:09:49 +08:00
培训班出来的?没学过数据结构吗?
NoKey
2023-07-29 09:42:47 +08:00
为啥不问问神奇的 chatgpt?
learningman
2023-07-29 10:39:29 +08:00
搞 Java 搞的
kachu673
2023-07-29 13:14:40 +08:00
原来真有程序员不懂这些东西。。。可见科班的重要性了
4kingRAS
2023-07-29 14:40:04 +08:00
类似你找车位,数组就是车位有刷编号,那不就 O (1) 找到了吗
kylix
2023-07-29 15:10:32 +08:00
OP 抛了问题后,匿了
czzhengkw
2023-07-29 16:00:46 +08:00
https://jifuwei.github.io/

大家去 OP 的博客学习一下吧
githmb
2023-07-29 20:18:58 +08:00
啊?
ignore
2023-07-29 21:06:16 +08:00
啊?
VinsonGuo
2023-07-30 00:24:30 +08:00
@maxssy remove 也不是 On ,因为是对数组整体 arraycopy ,跑 benchmark 性能和 linkedlist 差不多
qwerthhusn
2023-07-30 10:36:00 +08:00
不要直接喷 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-07-30 15:41:04 +08:00
很多人答不上技术问题
然后就挑 op 的标题态度问题

同样的问题问在 stackoverflow
你们觉得会有这么多事 b 跳出来教育人么
iBugOne
2023-07-30 17:22:08 +08:00
@good1uck
很多人提不出好的技术问题
然后就在标题里加“不服来辩”

同样的标题发在 Stack Overflow
你们觉得会有事 b 来理你吗
chaosz
2023-07-30 19:18:17 +08:00
钓鱼的吧

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

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

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

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

© 2021 V2EX