数组列表
- 数组列表是列表接口的实现。
- 数组列表未同步(因此不是线程安全的)
- 数组列表是使用数组作为内部数据结构实现的,可以动态调整大小。
链表
- 链表是列表和双端队列接口的实现。
- 链表不同步
- 链表是使用双链表作为内部数据结构实现的。
数组列表与LinkedList:
参数
|
数组列表
|
链表
|
---|---|---|
内部数据结构
|
它使用动态数组在内部存储元素
|
它使用双链表在内部存储元素
|
操纵
|
如果我们需要在ArrayList中插入或删除元素,则可能需要O(n),因为它在内部使用数组,在插入或删除的情况下我们可能必须移动元素
|
如果我们需要在LinkedList中插入或删除元素,它将使用O(1),因为它内部使用了双重LinkedList
|
搜索
|
在ArrayList中搜索更快,因为在内部使用基于索引的数组。所以这里的时间复杂度是O(1)
|
由于在内部使用双重链接列表,因此在LinkedList中搜索速度较慢,因此此处的时间复杂度为O(n)
|
介面
|
数组列表仅实现List接口,因此只能用作List
|
链表实现List,Deque接口,因此可以用作List,Stack或Queue
|
什么时候使用ArrayList或LinkedList?
这实际上取决于我们的需求。
- 如果我们有更多的插入或删除,则应使用LinkedList。
- 如果我们的插入或删除操作较少,而搜索操作较多,则应使用ArrayList。
请通过 爪哇核心面试题 了解更多面试问题。