CodeGym /Java 课程 /Java 语法 /ArrayList 和 LinkedList

ArrayList 和 LinkedList

Java 语法
第 8 级 , 课程 5
可用

“对你的大脑进行一些训练怎么样?我希望它仍在正常工作。”

“之前,在容器和集合的表中,你看到相同的接口可以有多个实现。我现在告诉你为什么需要这样做。以及 ArrayListLinkedList 有什么不同。”

“原因在于,集合可以通过不同的方式实现,没有一种实现始终是完美的。”在一种方法中,某些操作的速度很快,而另一些操作的速度却很慢。在另一种方法中,情况可能恰恰相反。没有完美的通用型解决方法。”

“因此,我们决定实现同一集合的多个版本。每个实现应针对一小组特定的操作进行优化。不同的集合就是这样产生的。我们将两个类作为示例进行研究:ArrayListLinkedList。”

ArrayList 和 LinkedList - 1

“在内部,ArrayList 是作为普通数组实现的。因此,在中间插入元素要求我们首先将所有后续元素移动一个位置,然后将新元素放入空闲插槽。获取和设置元素(get、set)的速度很快,因为这些操作只是处理相关的数组元素。”

LinkedList 具有不同的内部结构。它是作为包含相互关联元素的列表实现的:一组不同的元素,每个元素存储对列表中下一个和上一个元素的引用。要将元素插入此类列表的中间位置,只需更改其未来邻近元素的引用即可。但是,要获取第 130 个元素,必须从 0 到 130 遍历每个对象。换句话说,get 和 set 操作的速度会很慢。。我们来看看下表:”

说明 操作 ArrayList LinkedList
获取元素 get
设置元素 set
添加元素(到列表末尾) add
插入元素(在任意位置) add(i, value)
删除元素 remove

“我明白了。现在我开始理解了。是否有任何标准或原则可以帮助我了解在特定情况下哪个集合最合适?”

“为简单起见,你可以遵循以下原则:如果经常要在集合中间插入(或删除)元素,最好使用 LinkedList。在所有其他情况下,ArrayList 更适用。”

“我们将在更高级别的课程中研究它们的结构,现在我们只需练习使用它们。”

评论 (8)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Anonymous #11443734 级别 22,Russia,Russian Federation
20 一月 2024
OOO
幻梦 级别 16,无锡,中国
18 四月 2022
LinkedList是个双向链表(手动狗头)
且听风吟 级别 11,China
8 八月 2021
- arrayList使用的是数组数据结构,可以以O(1)时间复杂度对元素进行随机访问;LinkedList使用的是(双)链表结构查找某个元素的时间复杂度是O(n) - arrayList更适合于随机查找操作,linkedList更适合增删改查,时间复杂度根据数据浮动 - 两者都实现了List接口,但LinkedList额外实现了Deque接口,因此Linked还可以当作队列使用 - LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素
hello world 级别 22,shanghai,China
28 九月 2021
感谢课代表
z18335776829 级别 19,China,China
16 四月 2023
linkedList 更适合增删 (插入以及删除) , 数据越多 set与get时就要消耗更多时间(每次定位元素时都必须从头开始) arrayList 更适合改查(set 以及 get), 插入与删除时会移动其他后续元素的位置
23 七月 2021
双向链表
mykonons 级别 9,Hong Kong,Hong Kong
20 五月 2020
hello world!
Aspen Starlight 级别 8,China,China
3 一月 2022
giao