ArrayList & LinkedList
Posted 一朵花花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList & LinkedList相关的知识,希望对你有一定的参考价值。
联系与区别:
- ArrayList:底层使用数组来存储元素(动态类型的顺序表),查询快,增删慢,线程不安全
LinkedList:底层使用双向链表结构存储管理元素(双向链表),查询慢,增删快,线程不安全 - LinkedList 不支持高效的随机元素访问
- ArrayList 的空间浪费主要体现在在 list 的结尾预留一定的空间容量,
LinkedList 的空间花费则体现在它的每一个元素都需要消耗相当的空间 - ArrayList 和 LinkedList,其在末尾增加一个元素所花的开销都是固定的
- 两者均实现了 List 接口
时间复杂度分析:
ArrayList
1.add(E e) — O(1)
直接在后边添加元素
2.add(int index, E e) — O(N)
添加元素,在第 index 个元素后面插入,后面的元素需要向后移动
3.get(int index) — O(1)
直接读取第 index 下标的元素
4.remove(int index) — O(N)
删除指定位置的元素
LinkedList
1.add(E e) — O(1)
直接在列表末尾追加元素
2.add(int index, E e) — O(N)
在此列表中的指定位置插入指定的元素,需要先找到指定位置
3.get(int index) — O(N)
返回此链表中指定位置的元素,需依次遍历
4.remove( ) — O(1)
检索并删除此链表的头
补充
若 ArrayList 无限添加元素,会抛异常嘛?
每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小,它总是至少等于列表的大小
用无参构造方法时系统会默认提供默认参数10,随着向 ArrayList 中不断添加元素,其容量也自动增长,自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量
ArrayList扩容时,正常情况下会扩容1.5倍 (newCapacity = oldCapacity + (oldCapacity >> 1)
以上是关于ArrayList & LinkedList的主要内容,如果未能解决你的问题,请参考以下文章