• ArrayList 与LinkedList 区别


    ArrayList 与LinkedList 区别

    ArrayList 和LinkedList 都继承了List 接口,具有相同的行为,但是它们对某些操作的性能缺有着天壤之别。ArrayList是以顺序表的方式来存存储数据的,而LinkedList是链表的实现。下面来看一下俩种数据结构的区别:

    顺序表

        分配方式:静态分配。程序执行之前必须明确规定存储规模。若线性表长度n变化较大,则存储规模难于预先确定估计过大将造成空间浪费,估计太小又将使空间溢出机会增多。
    存储密度:为1。当线性表的长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表作为存储结构。                       
    存取方法:随机存取结构,对表中任一结点都可在O(1)时间内直接取得线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜。           
    插入删除操作:在顺序表中进行插入和删除,平均要移动表中近一半的结点,尤其是当每个结点的信息量较大时,移动结点的时间开销就相当可观。   

    链表   

        分配方式:动态分配只要内存空间尚有空闲,就不会产生溢出。因此,当线性表的长度变化较大,难以估计其存储规模时,以采用动态链表作为存储结构为好。
    存储密度:<1
    存取方法:顺序存取结构,链表中的结点,需从头指针起顺着链扫描才能取得。
    插入删除操作:在链表中的任何位置上进行插入和删除,都只需要修改指针。对于频繁进行插入和删除的线性表,宜采用链表做存储结构。若表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜

    由上面的比较可以得出结论: 进行查找,很少做插入和删除操作时或只用来存储数据时,采用ArrayList为宜, 对于频繁进行插入和删除的线性表,宜采用LinkedList。

  • 相关阅读:
    2018/12/08 L1-043 阅览室 Java
    2018/12/08 L1-042 日期格式化 Java
    breeze源码阅读心得
    Spark ML源码分析之四 树
    Spark ML源码分析之三 分类器
    Spark ML源码分析之二 从单机到分布式
    Spark ML源码分析之一 设计框架解读
    Adaboost的意义
    RBM如何训练?
    ChromeTimeline
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400512.html
Copyright © 2020-2023  润新知