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;
时间: 2024-10-05 18:51:23

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

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

Java基础系列--集合之ArrayList

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8494618.html 一.概述 ArrayList是Java集合体系中最常使用,也是最简单的集合类,是以数组实现的线性表. 数组在内存中是以一段连续的内存来进行存放的,同样,ArrayList也是如此,初始化时可以指定初始容量,也可以以默认容量(10)创建底层数组,由于ArrayList属于可变长列表,采用可变数组实现,数组本身是不变的,一旦定义就无法变长,可变数组使用创建新数组拷贝旧数

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

ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 内部如何实现 1 /** 2 * The array buffer into which the elements of the ArrayList are stored. 3 * The capacity of the ArrayList is the length of this array b

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

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

List ArrayList LinkedList vector简介与区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全 一.同步性 ArrayList,LinkedList是不同步的,而Vestor

java.基础、集合、枚举、泛型、

1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具 * myeclipse:是一个收费的插件,破解myeclipse, ** 安装目录的要求: 不能有中文和空格 ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格 * 破解myeclipse ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用 * 创建一个工程 - 类型 java project web project - 选择依赖的jdk,可以

java基础_集合

集合1.List:继承Collection接口,实现类有ArrayList LinkedList Vector ;有序,值可重复,可以存储空值: ①List遍历方法: 1 public static void main(String[] args) { 2 List<String> list = new ArrayList<String>(); 3 //插入数据 4 list.add(null);list.add("a");list.add("b&qu

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

Java——(五)Collection之List集合、ArrayList和Vector实现类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.List集合 List集合代表一个元素有序.客重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List集合默认按元素的添加 顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1...... 1.List接口和ListIterator接口 List作为Collection接口的子接口,所以可以使用Co