通过jdk源码理解ArrayList和LinkedList区别

原创 2017年01月03日 19:00:20
面试题经常会问到ArrayList和LinkedList的区别。通过源码更深入了解其区别。
ArrayList是数组形式存放数据的。
private transient Object[] elementData;
LinkList是链表是存放的。
private transient Entry<E> header = new Entry<E>(null, null, null);

private static class Entry<E> {
    E element;
    Entry<E> next;
    Entry<E> previous;

其数据关联关系如下图:

这里写图片描述

上图有两个数据,只画了previous,next没画,画了太乱,自行理解。

ArrayList增加数据

    public void add(int index, E element) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(
        "Index: "+index+", Size: "+size);

    ensureCapacity(size+1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,
             size - index);
    elementData[index] = element;
    size++;
    }

其先就index位置腾出来,将值放进去。

LinkedList增加数据:
将数据加入链表中间。

ArrayList和LinkedList比较:
ArrayList增加需要移动数据,而LinkedList不需要,删除相似。
查询数据,ArrayList相当于用指针直接查询,LinkedList需要一步步往上或往下寻找。
都可以无限增加数据。
ArrayList删除数据后,占用的引用指针空间不会释放。LinkedList数据对象不再引用,可以回收。

相关文章推荐

从源码来理解ArrayList和LinkedList区别

从源码理解ArrayList和LinkedList区别 ArrayList ArrayList默认容量为10,实质是一个数组用于存放元素,size表示ArrayList所包含的元素个数。 Ar...

JDK源码学习(3)-java.util.ArrayList与LinkedList

list的源码解析

JDK源码阅读——ArrayList\LinkedList

ArrayList (动态数组)javaDoc1.可变数组,允许null值存入.性能比LinkedList好?后文会做一个时间复杂度的比较 2.每个ArrayList实例都有一个容量capacity...
  • lemon89
  • lemon89
  • 2016年03月27日 23:07
  • 299

JDK源码学习之Arraylist与LinkedList

ArrayList和LinkedList是我们在开发过程中常用的两种集合类,本文将从底层源码实现对其进行简单介绍。 下图是Java集合类所涉及的类图。 一.ArrayList ...

【JDK】:ArrayList和LinkedList源码解析

ArrayListArrayList也叫数组列表,底层使用的数组实现的,严格来说是动态数组。ArrayList工作原理ArrayList工作原理其实很简单,底层是动态数组,每次创建一个ArrayLis...

源码剖析——ArrayList和LinkedList的区别

1、ArrayList是基于数组,LinkedList是基于链表2、基于数组的ArrayList对于根据索引值查找比较高效;基于链表的LinkedList对于增加、删除操作比较高效3、剖析CRUD:A...

java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异。 首先看一下List接口的的继承关系: list接口继承Col...

java源码分析之集合框架 ArrayList和LinkedList的区别05

List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它继承与Collection接口,代表有序...

Map+List+ArrayList+LinkedList Java源码

  • 2010年07月01日 15:19
  • 696KB
  • 下载

ArrayList LinkedList Vector区别

  • 2014年08月22日 14:15
  • 20KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过jdk源码理解ArrayList和LinkedList区别
举报原因:
原因补充:

(最多只允许输入30个字)