get(int index) 方法时间复杂度 O(1),如何做的到? - 如果底层是基于数组,那么数组为什么可以根据索引快速访问到数据?
remove(int index) 方法时间复杂度 O(N2) - 如果有大批量的数据在 list 中,且要删除其中一个元素,请问如何优化? - 就基于 ArrayList 来做,不该变成 LinkedList 这种?
get(int index) 方法时间复杂度 O(1),如何做的到? - 如果底层是基于数组,那么数组为什么可以根据索引快速访问到数据?
remove(int index) 方法时间复杂度 O(N2) - 如果有大批量的数据在 list 中,且要删除其中一个元素,请问如何优化? - 就基于 ArrayList 来做,不该变成 LinkedList 这种?
|
1
你这个问题应该回学校好好学学数据结构,而不是在这不服来辩
|
|
2
要辩你应该先陈述自己的观点,不应该是问句
ps: remove(int index) 复杂度 O(N2) 写错了吧。remove(Object o) 才是 O(N^2) |
|
3
那么数组为什么可以根据索引快速访问到数据?
大哥,数组存的数据在内存是连续的,当然可以根据索引来快速检索 |
|
5
这位更是重量级。
|
|
6
数组在内存里面 第一个位置 0x0 第二个 0x2 我想取第 10 个元素直接 0x0+9 不就直接拿到了吗。。。。
|
|
xapluxJul 28, 2023
7
额,哪来的勇气啊,数组存储是连续的
get 根据下标直接可以寻址了 remove 时间复杂度是 O(n) ,主要是删除一个元素后,其之后的元素要移动啊,如果删除的是最好一个元素,复杂度可以做到 O(1) |
|
a0210077Jul 28, 2023
8
服,请参考数据结构的数组章节
|
|
xapluxJul 28, 2023
9
ArrayList 和 LinkedList 的使用场景是不一样的,鱼和熊掌不可兼得,所以要权衡
如果需要频繁删除,那用 LinkedList 相对 ArrayList 要合适 |
|
frescoJul 28, 2023
10
这不是大学的内容么
|
|
11
震惊~
|
|
AyanokoujiJul 28, 2023
13
不会的话,虚心请教不行吗,非要起这么一个标题找喷
|
|
hidemyselfJul 28, 2023
14
我怀疑你是来钓鱼的。
|
|
DeeymmmJul 28, 2023
16
挺好,又 block 一个人
|
|
xtreme1Jul 28, 2023
17
钓的是_, 没的是_
|
|
swczxfJul 28, 2023 via iPhone
18
这是不是叫民科
|
|
Jrue0011Jul 28, 2023
19
额,看历史发帖和回复也不应该啊
|
|
mdnJul 28, 2023
20
不服来辩 === 求求大家告诉我答案
|
|
deplivesbJul 28, 2023
21
op 的 blog 和他的三个帖子,看出来就是个 xx
|
|
EricccccccccJul 28, 2023
22
重新学下组成原理?
|
|
issakchillJul 28, 2023
23
为啥不问问神奇的 chatgpt?
|
|
coderxyJul 28, 2023
24
我原来面试别人的时候,不少人分不清数组跟链表的区别的时候我的心理活动跟现在一模一样的
|
|
itechifyJul 28, 2023 via Android
25
钓鱼贴
|
|
26
1. ArrayList 的首个元素的地址是已知的
2. ArrayList 底层实现在内存上表现为各个元素顺序排放的数组 3. ArrayList 每个元素的内存占用大小是已知的 所以 get 在取得索引后可以通过公式: `目标元素的地址 = 首元素地址 + 索引 * 每个元素的内存占用大小` 来取得, 所以时间复杂度是 O(1) 又因为各元素是顺序排放的, remove 某个元素后需要重新排列整个数组, 所以是 O(n) |
|
cyndihuifeiJul 28, 2023
27
为什么这种问题都搞不清楚还要发技术文章
|
|
28
@xaplux 实际上 LinkedList 已经基本没有适合使用的地方了,具体可以看这个知乎回答 https://www.zhihu.com/question/563680801/answer/2750393567
|
|
zengmingyang96Jul 28, 2023
29
数组为什么可以根据索引快速访问到数据? 因为内存支持随机读取 😂
|
|
neptunoJul 28, 2023 via iPhone
31
我一般都是钻到内存里面,自己去找地址
|
|
BeautifulSoapJul 28, 2023 via Android
32
本来以为 lz 想要问的是内存电路是怎么寻址的,实但仔细想想 lz 可能真的连数组是啥都不懂。。。
|
|
itechifyJul 28, 2023
33
@dragondove 偶尔还是会用到的,不确定数量情况下
|
|
dk7952638Jul 28, 2023
34
看这标题,以为来到了贴吧
|
|
xiangbohuaJul 28, 2023
35
你说了几个问题,你都没给结论,辩论啥
|
|
haolongsunJul 28, 2023
36
没上过数据结构?底层是数组,再细说是对数组首地址的引用,快速访问到素就是首地址+偏移量*数组元素 sizeof,这就是 O(1),再多说就是 arraylist 的结构就是一个指向堆上数组的指针,一个 len ,一个 cap 。
|
|
BanGanExpertJul 28, 2023
37
@v2eb 以前本身业务需求多,JavaWeb 上手不又难,造成很多基础不扎实,不清楚基本的数据结构知识,很多人也能进入行业做开发。当然现在新人水平普遍是专业对口毕业的,自然很大程度上都没这个情况了。我以前面试人一般第一个问题就是,你写 Java 用了哪些线性结构的集合实现,分别在哪种场景,除了当普通集合还能干嘛( Stack 、Heap 、Queue )。
|
|
xhinliangJul 28, 2023
38
挺好,又 block 一个人
|
|
strrngJul 28, 2023
39
OP 感觉多少是有点搞笑了😄
|
|
zcm3579Jul 28, 2023
40
辩了个勾巴 , 脑残就不要发帖
|
|
CookyJul 28, 2023
41
看来裁员裁的还不够多
|
|
makeloveJul 28, 2023
42
你不适合这个职业,趁早转行
|
|
zhch602Jul 28, 2023 via iPhone
43
这时候就看出来第一门语言学 C 的好处了——不会问出这种弱智问题
|
|
YadominJul 29, 2023 via Android
44
可见科班出身的必要性
|
|
45
跟个弱智一样
|
|
IvanLi127Jul 29, 2023 via Android
46
什么鬼。。。这问题能问得出口?这属于话不会说,代码也不懂写。
|
|
QzierJul 29, 2023 via iPhone
47
培训班出来的?没学过数据结构吗?
|
|
NoKeyJul 29, 2023
48
为啥不问问神奇的 chatgpt?
|
|
learningmanJul 29, 2023 via Android
49
搞 Java 搞的
|
|
kachu673Jul 29, 2023
50
原来真有程序员不懂这些东西。。。可见科班的重要性了
|
|
4kingRASJul 29, 2023
51
类似你找车位,数组就是车位有刷编号,那不就 O (1) 找到了吗
|
|
kylixJul 29, 2023
52
OP 抛了问题后,匿了
|
|
czzhengkwJul 29, 2023
53
|
|
githmbJul 29, 2023
54
啊?
|
|
ignoreJul 29, 2023
55
啊?
|
|
VinsonGuoJul 30, 2023 via iPhone
56
@maxssy remove 也不是 On ,因为是对数组整体 arraycopy ,跑 benchmark 性能和 linkedlist 差不多
|
|
qwerthhusnJul 30, 2023
57
不要直接喷 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 变大出现时间增长。 |
|
good1uckJul 30, 2023 via Android
58
很多人答不上技术问题
然后就挑 op 的标题态度问题 同样的问题问在 stackoverflow 你们觉得会有这么多事 b 跳出来教育人么 |
|
chaoszJul 30, 2023
60
钓鱼的吧
|
|
rOrangeJul 31, 2023
62
好好读读源码,连 linkedList 作者都发帖说不用 linkedList
|
|
lyxenoJul 31, 2023
63
@qwerthhusn 这么一看,操作系统和 JVM 帮普通的程序员做了太多太多了
|
|
dongdong12345Jul 31, 2023
64
可以看看数据在内存中是如何布局的
|
|
t1shinyruoAug 4, 2023
65
玩会原神吧
|
|
66
嗐 原来大家都在第一层~(我感觉没表达清楚问题),匿了匿了 害怕
|
|
258Dec 21, 2023
67
嗯?
|
|
sz065vHi2V1c6LKPApr 23, 2025
68
@Livid ,id 为 idealhs 的 45 楼,辱骂他人。
|