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回收。

  • 相关阅读:
    Android:res之selector背景选择器
    工作备份 build.gradle
    Android studio听云接入另外一种方式
    自由开发者_免费可商用的图片资源推荐
    Duplicate files copied in APK META-INF/LICENSE.txt
    模仿九宫格拼音输入法,根据输入的数字键,形成对应的汉字拼音
    Map转Bean小工具
    验证身份证是否合法算法
    jqzoom插件图片放大功能的一些BUG
    外层div高度不随内层div高度改变的解决办法
  • 原文地址:https://www.cnblogs.com/nineberg/p/13676166.html
Copyright © 2011-2022 走看看