PS:本篇博客主要參考jdk的底层源代码。而非自己动手写代码。

请问ArrayList、LinkedList、Vector的差别

①ArrayList底层实际上是採用数组实现的(而且该数组的类型的Object类型的)

②假设jdk6,採用Array.copyOf()方法来生成一个新的数组,假设是jdk5,採用的是System.arraycopy()方法(当加入的数据量大于数组的长度时候)

③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象

④ArrayList、Vector底层都是採用数组实现的

⑤对于ArrayList。方法都不是同步的,对于Vector。大部分public方法都是同步的

⑥LinkedList採用双向循环链表

⑦对于ArrayList,查询速度非常快,添加和删除(非最后一个节点)操作非常慢(本质上由数组的特性决定的)

⑧对于LinkedList,查询速度很慢,添加和删除操作很快(本质上是由双向循环链表决定的)

1、ArrayList的默认构造方法代码(包含相关代码):

  1. private transient Object elementData[];
  2.  
  3. public ArrayList(int i) {
  4. if (i < 0) {
  5. throw new IllegalArgumentException((new StringBuilder())
  6. .append("Illegal Capacity: ").append(i).toString());
  7. } else {
  8. elementData = new Object[i];
  9. return;
  10. }
  11. }
  12.  
  13. public ArrayList() {
  14. this(10);
  15. }

2、LinkList默认构造方法 (包含相关代码)

  1. public LinkedList() {
  2. header = new Entry(null, null, null);
  3. size = 0;
  4. header.next = header.previous = header;
  5. }
  6.  
  7. private static class Entry {
  8.  
  9. Object element;
  10. Entry next;
  11. Entry previous;
  12.  
  13. Entry(Object obj, Entry entry1, Entry entry2) {
  14. element = obj;
  15. next = entry1;
  16. previous = entry2;
  17. }
  18. }
  19.  
  20. private transient Entry header;
  21. private transient int size;

3、Vector默认构造方法(包含相关代码)

  1. public Vector(int i, int j) {
  2. if (i < 0) {
  3. throw new IllegalArgumentException((new StringBuilder())
  4. .append("Illegal Capacity: ").append(i).toString());
  5. } else {
  6. elementData = new Object[i];
  7. capacityIncrement = j;
  8. return;
  9. }
  10. }
  11.  
  12. public Vector(int i) {
  13. this(i, 0);
  14. }
  15.  
  16. public Vector() {
  17. this(10);
  18. }
  19.  
  20. protected Object elementData[];
  21.  
  22. protected int capacityIncrement;

java基础之集合List-ArrayList、LinkedList、Vector的差别的更多相关文章

  1. List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)

    List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...

  2. Java基础系列--集合之ArrayList

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8494618.html 一.概述 ArrayList是Java集合体系中最常使用,也是最简单 ...

  3. java基础,集合,Arraylist,源码解析(基础)

    ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...

  4. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  5. java基础解析系列(十)---ArrayList和LinkedList源码及使用分析

    java基础解析系列(十)---ArrayList和LinkedList源码及使用分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder jav ...

  6. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  7. 第6节:Java基础 - 三大集合(上)

    第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...

  8. Java基础——List集合整理(脑图,源码,面试题)

    常在知乎牛客网关注Java的一些面试,了解过校招社招常面哪些内容.Java集合不仅使用频率高而且在初面中也常常被问到,何止是常常,关于ArrayList的扩容,HashMap的一些底层等等都被问到烂了 ...

  9. java基础技术集合面试【笔记】

    java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...

随机推荐

  1. handsontable常规配置的中文API

    常规配置: 1.固定行列位置 fixedRowsTop:行数 //固定顶部多少行不能垂直滚动 fixedColumnsLeft:列数 //固定左侧多少列不能水平滚动 2.拖拽行头或列头改变行或列的大小 ...

  2. OpenVPN莫名其妙断线的问题及其解决

    1.问题 不得不说,这是一个OpenVPN的问题,该问题几乎每个使用OpenVPN的人都碰到过,也有很多人在网上发问,然而一直都没有人能给出解决办法,甚至很多帖子上表示因为这个问题而放弃了使用Open ...

  3. (36)JS运动之使物体向右运动

    基本思路:样式要是绝对定位,不然的话根本走不起来.当开启一个定时器的时候.必须先清除定时器.这是为了防止鼠标连续点击button而开启多个定时器,导致物体的速度加快等原因,其次要控制好物体的运动和停止 ...

  4. UIImageView圆角,自适应图片宽高比例,图片拉伸,缩放比例和图片缩微图

    /*      设置圆角,通过layer中的cornerRadius和masksToBounds即可.            自适应图片宽高比例.通过UIViewContentModeScaleAsp ...

  5. ORACLE序列的使用总结

    1.创建序列ORACLE序列的语法格式为: CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXV ...

  6. Chrome开发者工具详解(3):Timeline面板

    Timeline面板 Timeline面板是整个面板里面最复杂的一个面板,涉及的东西比较多.可以利用这个面板来记录和分析网页运行过程中的所有活动行为信息. 你可以充分利用这个面板来分析你的网页的程序性 ...

  7. BFC,IFC,GFC,FFC的定义及功能

    What's FC?一定不是KFC,FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定 ...

  8. 转化json

    /// <summary> /// 转换成JSON字符串 /// </summary> /// <param name="jsonObject"> ...

  9. SQLSERVER执行时间统计工具SQLQueryStress

    有时候需要检测一下SQL语句的执行时间,相信大家都会用SET STATISTICS TIME ON开关打开SQLSERVER内置的时间统计 SET STATISTICS TIME ON 不过这款小工具 ...

  10. 使用oracle来计算方差及标准差

    /* Formatted on 5/24/2012 4:15:58 PM (QP5 v5.149.1003.31008) */ SELECT deptno,       ename,          ...