java基础之集合List-ArrayList、LinkedList、Vector的差别
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的默认构造方法代码(包含相关代码):
private transient Object elementData[];
public ArrayList(int i) {
if (i < 0) {
throw new IllegalArgumentException((new StringBuilder())
.append("Illegal Capacity: ").append(i).toString());
} else {
elementData = new Object[i];
return;
}
}
public ArrayList() {
this(10);
}
2、LinkList默认构造方法 (包含相关代码)
public LinkedList() {
header = new Entry(null, null, null);
size = 0;
header.next = header.previous = header;
}
private static class Entry {
Object element;
Entry next;
Entry previous;
Entry(Object obj, Entry entry1, Entry entry2) {
element = obj;
next = entry1;
previous = entry2;
}
}
private transient Entry header;
private transient int size;
3、Vector默认构造方法(包含相关代码)
public Vector(int i, int j) {
if (i < 0) {
throw new IllegalArgumentException((new StringBuilder())
.append("Illegal Capacity: ").append(i).toString());
} else {
elementData = new Object[i];
capacityIncrement = j;
return;
}
}
public Vector(int i) {
this(i, 0);
}
public Vector() {
this(10);
}
protected Object elementData[];
protected int capacityIncrement;
java基础之集合List-ArrayList、LinkedList、Vector的差别的更多相关文章
- List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)
List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...
- Java基础系列--集合之ArrayList
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8494618.html 一.概述 ArrayList是Java集合体系中最常使用,也是最简单 ...
- java基础,集合,Arraylist,源码解析(基础)
ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
- java基础解析系列(十)---ArrayList和LinkedList源码及使用分析
java基础解析系列(十)---ArrayList和LinkedList源码及使用分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder jav ...
- ArrayList LinkedList Vector
ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...
- 第6节:Java基础 - 三大集合(上)
第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...
- Java基础——List集合整理(脑图,源码,面试题)
常在知乎牛客网关注Java的一些面试,了解过校招社招常面哪些内容.Java集合不仅使用频率高而且在初面中也常常被问到,何止是常常,关于ArrayList的扩容,HashMap的一些底层等等都被问到烂了 ...
- java基础技术集合面试【笔记】
java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...
随机推荐
- (转)Tomcat 7 访问 Manager 和 Host Manager
配置好 Tomcat 7.0 后,在 tomcat-users.xml 中配置用户角色来访问 localhost:8080 的这样三个按钮总出现问题: Server Status Manager Ap ...
- vue 单页面应用实战
1. 为什么要 SPA? SPA: 就是俗称的单页应用(Single Page Web Application). 在移动端,特别是 hybrid 方式的H5应用中,性能问题一直是痛点. 使用 SPA ...
- 虚拟化之docker安装篇
1,docker pull centos 下载centos镜像 docker search centos 搜索镜像 2,docker images 查看本地镜像 3,do ...
- ios开发 block语句块
ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...
- 我跟着siki学Unity3D游戏开发——PongGame
一.屏幕坐标转换为世界坐标. 1.游戏逻辑,根据界面布局,将墙体控制到对应的位置: vector3 position=Camer.main.ScreenToWorldPoint(new vetor2( ...
- TCP的状态
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...
- vim常用指令一览
插入指令 i 在光标处插入字符 I 在光标所在行最前插入 a 在光标所在字符后面插入 A 在光标所在行的最后插入 o 在光表所在行下面插入一行 O 在光标所在行上面插入一行 r 替换光标所在字符,只替 ...
- fddd
<script language="JavaScript" type="text/javascript"> function exportChart ...
- 使用SQL脚本访问操作远程数据库
USE [Hik] GO /****** Object: StoredProcedure [dbo].[sp_test] Script Date: 08/21/2015 09:55:21 ****** ...
- Android基础学习之context
Context既是环境变量,也是句柄(handler),也是上下文.类似用使用工具的工具,比如写字来说,笔是工具,Context可以看成是手,用来使用笔.context具有唯一性,具有很多种行为(定义 ...