1000K数据在Java中用哪种选型进行存储?

如题,笔者在面试时被考察到该问题,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个空引用为例)
1000K数据在Java中用哪种选型进行存储?_第1张图片
如上图所示,当元素数量非常多的时候,尽量选用ArrayList。


参考资料:

When to use LinkedList over ArrayList in Java?

你可能感兴趣的:(面试,Java,java,开发语言)