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

  • 相关阅读:
    [BTS][收藏]如何通过BizTalk Server 2006 Exam (70235)
    [BTS]BizTalk调用WebService
    [WWF]我的第一个Workflow项目
    谈谈如何学习BizTalk
    [BTS06]BizTalk2006 SDK阅读笔记(五) 管道Pipeline
    [BTS06]BizTalk2006 SDK阅读笔记(三) 工作过程
    如何实现模块间通信[DNN 3.2.2]
    印度是如何做软件开发的
    实施ERP100问
    C#分析数据库结构,使用XSL模板自动生成代码
  • 原文地址:https://www.cnblogs.com/nineberg/p/13676166.html
Copyright © 2011-2022 走看看