如题,笔者在面试时被考察到该问题,Java中面临这样大的数组,选择ArrayLIst还是LinkedList来进行存储呢? 给出你的依据。
结论:大多数场景下直接使用ArrayList和ArrayDeque即可。
ArrayList和LinkedList均是实现了List接口的类。而LinkedList底层是双向链表,而ArrayList可以动态扩容缩容。
在 ArrayList 中访问一个元素需要常数时间 [O(1)],添加一个元素需要 O(n) 时间 [最坏情况]。在 LinkedList 中,插入一个元素需要 O(n) 时间,访问也需要 O(n) 时间,但是 LinkedList 比 ArrayList 使用更多的内存。
算法 | ArrayList | LinkedList |
---|---|---|
查找头部 | O(1) | O(1) |
查找尾部 | O(1) | O(1) |
按idx查找 | O(1) | O(n) |
从头部插入 | O(n) | O(1) |
从尾部插入 | O(1) | O(1) |
从元素后插入 | O(n) | O(1) |
根据参考回答提供的图片,我们可以看出用LinkedList以及ArrayList存储数据时在x32与x64设备上占用空间的情况。(以N个空引用为例)
如上图所示,当元素数量非常多的时候,尽量选用ArrayList。
参考资料:
When to use LinkedList over ArrayList in Java?