通过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数据对象不再引用,可以回收。

java集合框架05——ArrayList和LinkedList的区别

前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容。 List概括 先来回顾一下List在Collection中的的框架图...
  • eson_15
  • eson_15
  • 2016年04月13日 20:39
  • 10370

【Java】 ArrayList与LinkedList的区别

LinkedList与ArrayList的区别
  • yingpaixiaochuan
  • yingpaixiaochuan
  • 2015年10月08日 18:07
  • 936

比较ArrayList、LinkedList、Vector

LinkedList的add和remove性能比ArrayList高,你确定?
  • renfufei
  • renfufei
  • 2013年12月02日 18:11
  • 42067

小谈面试时面试官为什么问ArrayList,LinkedList与List的不同

当你做为一个技术面试官面试应聘者时,你总是想尝试能全面了解这个面试者的方方面面。技术,背景,性格都是被重点关注的。面试官想在短暂的面试过程中多了解应聘者,那就要有明确的目的性。但是一般面试官不会只是简...
  • yuyanjun123
  • yuyanjun123
  • 2016年06月22日 16:29
  • 434

ArrayList,LinkedList,Vector,Stack之间的区别

从多个方面讨论它们之间的区别: 1,线程安全性 2,实现方式 3,容量扩展方面 4,效率方面...
  • a19881029
  • a19881029
  • 2015年05月06日 17:47
  • 5784

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

List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它继承与Collection接口,代表有序...
  • wangnanwlw
  • wangnanwlw
  • 2016年08月17日 13:35
  • 602

android区别——ArrayList和LinkedList

LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点...
  • chuntiandejiaobu10
  • chuntiandejiaobu10
  • 2016年08月29日 09:28
  • 1058

Vector,ArrayList,LinkedList的特点和区别

1.Vector简介及特点 1、Vector是内部是以动态数组的形式来存储数据的。 2、Vector具有数组所具有的特性、通过索引支持随机访问、所以通过随机访问Vector中的元素效率非常高、但是执...
  • m0_38110132
  • m0_38110132
  • 2017年07月11日 15:37
  • 353

Vector,ArrayList,LinkedList的区别与适用场景

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。...
  • bestxiaok
  • bestxiaok
  • 2017年08月31日 08:52
  • 213

Java 中Vector、ArrayList和LinkedList 的区别

Java 中Vector、ArrayList和LinkedList 的区别Java 中Vector、ArrayList和LinkedList 的区别 SDK提供了有序集合接口java.util.Lis...
  • daryl715
  • daryl715
  • 2007年02月25日 09:49
  • 3713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过jdk源码理解ArrayList和LinkedList区别
举报原因:
原因补充:

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