ArrayList & LinkedList

x33g5p2x  于2021-10-17 转载在 Java  
字(0.8k)|赞(0)|评价(0)|浏览(243)

联系与区别:

  • 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)

相关文章

微信公众号

最新文章

更多