zoukankan      html  css  js  c++  java
  • ArrayList 、LinkedList的区别,底层的实现呢了解吗,有没有什么优缺点,分别适合于什么样的场景

    ArrayList 、LinkedList的区别,底层的实现呢了解吗,有没有什么优缺点,分别适合于什么样的场景,多线程环境下,有没有安全的 list的实现类呢?

    Arraylist 与 LinkedList都属于实现了List接口的类,首先通过名字来看 Array表示数组,Link表示链表。
    所以Arraylist底层是基于动态数组的,而LinkedList底层是基于双向链表的。
    ArrayList必须是连续内存的,而LinkedList不要求是连续内存。
    ArrayList查询快,增删慢;Linked增删块,查慢。
    (arraylist查询效率高, 是因为arraylist可以连续存放元素的,找到第一个元素的首地址,再加上每个元素的占据的字节大小就能定位到对应的元素

    linkedlist插入删除效率高,是因为执行插入操作时,只需要操作引用,元素之间不需要移动,他们分布在不同的地方,通过引用来互相关联起来。而arraylist需要移动元素,故效率低)

    也就是arraylist底层是动态数组,所以查询时直接通过访问下标,查效率高,而增加和删除某一个位置后,后方元素都得向前移动一位。
    当然最坏情况就是删除第一个元素,而后面的第2到第n个元素都得往前移动一位,所以增删慢。

    那为什么说arraylist是基于动态数组呢,一般数组,容量确定了就不可以在更改,也无法超过,但是arraylist可以。
    例:当数组元素数已满时调用了add方法向尾部添加一个元素,则此时会进行扩容,arraylist会 Arrays.copyOf 复制一个更大的数组 1.5倍,而原数组会被抛弃,被GC回收。

  • 相关阅读:
    支付宝-单笔转账接口
    # Creating Server TCP listening socket *:6379: bind: No such file or directory
    Window 下安装 Redis,配置redis环境变量
    Ajax的跨域(一)
    web人脸识别(二)
    web人脸识别(一)
    给GridView添加列头复选框
    计算两个时间相差多少年月日的sql算法
    MUI下拉加载安卓手机无效的解决方法
    博主回来了!
  • 原文地址:https://www.cnblogs.com/nineberg/p/13676166.html
Copyright © 2011-2022 走看看