• ArrayList 和 LinkedList 源码分析


    ArrayList 和 LinkedList 是java集合框架中 List 的实现类。

    从数据结构上看,ArrayList 是通过数组存储数据,LinkedList 是一个双向链表。

    下面具体分析一下其中比较重要的几个方法

    一、ArrayList

      ArrayList 的数据全部存储在这个数组中。 

      1、add(E e)

      在添加元素时,会首先判断是否需要扩容,如果需要,按一定的算法进行扩容,不需要,直接将要添加的元素添加到最后。

      扩容的源代码如下:

      

      先把容积扩展到原容积+原容积/2,如果不够,直接设置为minCapacity(关于这个数值究竟是多少,可以跟踪一下源码),如果这个值大于 MAX_ARRAY_SIZE,则会将容积设置为Integer.MAX_VALUE。

      然后使用新容积创建新数组。

      2、add(int index, E element)

      这个方法就是插入。帖一下源码

      可以看到,同样先确认容积是否足够,之后把下标为index和index之后的数据后移一个位置,然后把新元素插入。

    二、LinkedList

    先帖一下关键代码

      LinkedList是一个双向链表,每个结点都有一个指向前一个及后一个结点的引用

      1、add(int index, E element)  插入方法

      

      因为是链式存储,所以不用考虑扩容的情况

      2、node(int index)   查找第 index 个结点

      

      因为是双向链表,所以可以从头到尾查找,也可以从尾到头查找。当index小于 size/2,也就是说,当index在中间元素前边的时候,从头到尾查找,反之则从尾到头查找。

      这样对于查找效率有一定优化作用。

  • 相关阅读:
    jmeter单一接口测试
    mac os下载安装jmeter
    十、集成使用redis
    Java之Poi导出Excel文档
    134. Gas Station (Array; DP)
    53. Maximum Subarray (Array; DP)
    36. Valid Sudoku (Array; HashTable)
    37. Sudoku Solver (Array;Back-Track)
    52. N-Queens II (Array; Back-Track)
    51. N-Queens (Array; Back-Track, Bit)
  • 原文地址:https://www.cnblogs.com/yinkh/p/6428759.html
Copyright © 2020-2023  润新知