ArrayList、LinkedList、Vector、Array】的更多相关文章

java.util.List接口是Java Collections Framework的一个重要组成部分,List接口的架构图如下: 本文将通过剖析List接口的三个实现类——ArrayList.LinkedList和Vector的源码,带你走近List的世界. ArrayList ArrayList是List接口可调整数组大小的实现.实现所有可选列表操作,并允许放入包括空值在内的所有元素.每个ArrayList都有一个容量(capacity,区别于size),表示底层数组的实际大小,容器内存储…
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 继续上一篇的容器文章认识容器,泥瓦匠慢慢带你们走进List的容器解说.今天泥瓦匠想说说 ArrayList .LinkedList和Vector比较. 一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 nu…
在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这: Java集合(五)--LinkedList源码解读 Java集合(四)--基于JDK1.8的ArrayList源码解读 这篇文章,对比一下ArrayList和LinkedList和Vector,主要是前面两个,因为Vector很少使用,如果考虑并发安全,也会使用 CopyOnWriteArrayList ArrayList和LinkedList的对比:插入.修改.删除.遍历 顺序插入add(Object): 1.Ar…
ArrayList.LinkedList和Vector源码分析 ArrayList ArrayList是一个底层使用数组来存储对象,但不是线程安全的集合类 ArrayList的类结构关系 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { } ArrayList实现了List接口,List…
List概览 List,正如它的名字,表明其是有顺序的.当讨论List的时候,最好拿它跟Set作比较,Set中的元素是无序且唯一:下面是一张类层次结构图,从这张图中,我们可以大致了解java集合类的整体架构: ArrayList vs LinkedList vs Vector 从上面的类层次结构图中,我们可以发现他们都实现了List接口,它们使用起来非常相似.区别主要在于它们各自的实现,不同的实现导致了不同的性能和不同的操作. ArrayList是为可变数组实现的,当更多的元素添加到ArrayL…
目录 特性列举 底层存储结构不同 线程安全性不同 默认的大小不同 扩容机制 迭代器 增删改查的效率 总结一下 要想回答这个问题,可以先把各种都讲特性,然后再从底层存储结构,线程安全,默认大小,扩容机制,迭代器,增删改查效率这几个方向入手. 特性列举 ArrayList:动态数组,使用的时候,只需要操作即可,内部已经实现扩容机制. 线程不安全 有顺序,会按照添加进去的顺序排好 基于数组实现,随机访问速度快,插入和删除较慢一点 可以插入null元素,且可以重复 Vector和前面说的ArrayLis…
一.ArrayList和Vector的区别 ArrayList与Vector主要从以下方面来说. 1.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的. 2.操作: 由于Vector支持多线程操作,所以在性能上就比不上ArrayList了. 3.数据增长: ArrayList和Vector都有一个初始的容量大小,当存储进去它们里面的元素个数超出容量的时候,就需要增加ArrayList和Vector的存储空间,每次增加存储空间的时候不是只增加一…
ArrayList源码: private static final int DEFAULT_CAPACITY = 10;//默认长度 /** * Shared empty array instance used for empty instances. */ private static final Object[] EMPTY_ELEMENTDATA = {}; //默认数组 /** * The array buffer into which the elements of the Array…
一,线程安全性 Vector.Stack:线程安全 ArrayList.LinkedList:非线程安全 二,实现方式 LinkedList:双向链表 ArrayList,Vector,Stack:数组 三,容量扩展方面 由于ArrayList和Vector(Stack继承自Vector,只在Vector的基础上添加了几个Stack相关的方法,故之后不再对Stack做特别的说明)使用数组实现,当数组长度不够时,其内部会创建一个更大的数组,然后将原数组中的数据拷贝至新数组中 //ArrayList…
Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制.移动.代价比较高.因此,它…
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Collection接口,Collection接口继承Iterable接口. Iterable接口定义的方法: public interface Iterable<T> { /** * Returns an iterator over a set of elements of type T. * * @re…
1.ArrayList和Vector都是数组存储,插入数据涉及到数组元素移动等操作,所以比较慢,因为有下标,所以查找起来非常的快. LinkedList是双向链表存储,插入时只需要记录本项的前后项,查找的时候,按序号进行向前向后遍历. Vector是线程同步的. 具体参考:https://www.cnblogs.com/yw-ah/p/5841327.html 总结:这三个都继承了list接口.list是一个有序的Collection,Collection有iterator方法. 2.遍历列表…
/** * Collection接口  不唯一,无序 * 常用的方法: * add(Object e) 确保此 collection 包含指定的元素(可选操作). * size():获取集合中元素的个数 * remove(Object e):移除元素 * clear():清空集合中元素 * contains(Object e):判断集合中是否包含指定的元素 * isEmpty():判断集合是否为空 * iterator():获取集合对应的迭代器. * --List接口:不唯一,有序(插入顺序)…
ArrayList特点:底层使用数组数据结构,查询速度快(使用脚标查),插入删除慢(索引要改变) LinkedList特点:底层使用链表数据结构,查询慢(需要一个一个去问),插入删除快 Vector特点:底层是数组数据结构,线程同步,被ArrayList替代了 ArrayList import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { ArrayList l…
ArrayList: 基于数组的数据结构,地址连续,一旦数据保存好了,查询效率比较高,但是因为其地址连续,所以增删数据需要移动数据,影响速度 内部数组长度默认为10,当需要扩容时,数组长度按1.5倍增长(old+(old>>1)),移除时长度-1:数组是被transient修饰,ArrayList通过readObject,writeObject方法实现序列化 LinkedList: 基于双向链表的数据结构,地址是任意的,对于增删比较快,查找比较慢(内部保存了Node类,通过不停的node.ne…
翻译人员: 铁锚 翻译时间: 2013年12月2日 原文链接: ArrayList vs. LinkedList vs. Vector 1. List概述 List,就如图名字所示一样,是元素的有序列表.当我们讨论List时,将其与Set作对比是一个很好的办法,Set集合中的元素是无序且唯一的. 下图是Collection的类继承图,从图中你可以对本文所讨论的知识有大致的了解. 图1 2. ArrayList.LinkedList与Vector的对比 从图中可以看出,这三者都实现了List 接口…
1. List概述 List,就如图名字所示一样,是元素的有序列表.当我们讨论List时,将其与Set作对比是一个很好的办法,Set集合中的元素是无序且唯一的.下图是Collection的类继承图,从图中你可以对本文所讨论的知识有大致的了解. 图1 2. ArrayList.LinkedList与Vector的对比从图中可以看出,这三者都实现了List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率.ArrayList 是一个可改变大小的数组.当更多的…
一.基础介绍(Set.List.Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象. Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复.他的有些实现类能对集合中的键对象进行排序. 二.基本接口和类型 1.Iterator接口  该接口允许遍历集合中的所有元素,一共有三个方法: pu…
原文地址: http://www.cnblogs.com/liqiu/p/3302607.html 一.基础介绍(Set.List.Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象. Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复.他的有些实现类能对集合中的键对象进行排序. 二…
前言 在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,比如: ArrayList默认大小是多少,是如何扩容的? ArrayList和LinkedList的底层数据结构是什么? ArrayList和LinkedList的区别?分别用在什么场景? 为什么说ArrayList查询快而增删慢? Arrays.asList方法后的List可以扩容吗? modCount在非线程安全集合中的作用? ArrayList和LinkedList的区别.优缺点以及应用场景 ArrayList(1.8…
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数返回的大小,当超过此分配的空间时,再整体重新分配一块内存存储,这给人以vector为一个连续内存的感觉.通常此默认的内存分配能完成大部分情况下的存储. 优点: (1)不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数字进行动态操作. (2)随机访问方便,即支持[ ]操作符和vec…
java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可以重复因为每个元素有自己的角标(索引)  |-- ArrayList:底层的数据结构是数组结构,特点是:查询很快,增 删 稍微慢点,线程不同步 |-- LinkedList:底层使用的是链表数据结构,特点是:增 删很快,查询慢. |--Vector:底层是数组数据结构,线程同步,被ArrayList…
---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而LinkedList是以元素列表存储的数据,每一个元素都和它的前一个元素和后一个元素连接在一起,查找元素的时间复杂度是O(n). 相比于ArrayList,LinkedList的添加.查找.删除等操作执行速度更快,因为当元素被添加到集合的任意位置时,并不需要向数组那样重新计算大小或更新索引. LinkedLis…
前言 在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,比如: ArrayList默认大小是多少,是如何扩容的? ArrayList和LinkedList的底层数据结构是什么? ArrayList和LinkedList的区别?分别用在什么场景? 为什么说ArrayList查询快而增删慢? Arrays.asList方法后的List可以扩容吗? modCount在非线程安全集合中的作用? ArrayList和LinkedList的区别.优缺点以及应用场景 ArrayList(1.8…
List容器类图 List是一个接口,它继承自Collection和Iterable,它的实现类有AbstractList,AbstrackSequenceList,ArrayList,LinkedList,Vector,Stack: AbstractList是一个抽象类,它实现了最基本的List接口,它的子类包括AbstrackSequenceList,ArrayList和Vector: AbstractSequenceList是一个抽象类,它实现了Iterable,Collection,Li…
ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的.二.操作:    由于Vector支持多线程操作,所以在性能上就比不上ArrayList了.三.数据增长:       ArrayList和Vector都有一个初始的容量大小,当存储进去它们里面的元素个数超出容量的时候,就需要增加ArrayList和Vector的存储空间,每次增加存储空间的时候…
就 ArrayList 与 Vector 主要从二方面来说. 一.同步性:Vector 是线程安全的,也就是说是同步的,而ArrayList 是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector 默认增长为原来一培,而 ArrayList 却是原来的一半 就 HashMap 与 HashTable 主要从三方面来说. 一.历史原因:Hashtable 是基于陈旧的Dictionary 类的,HashMap 是 Java 1.2 引进的 Map 接口的一个实现 二.同步性:Has…
ArrayList与LinkedList的区别 ArrayList底层是一个动态数组,LinkedList底层是双向链表 当随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找. 当对数据进行增加和删除的操作时(add和remove操作),LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引…
ArrayList 本质是一个数组. 优势:追加元素到数组末尾的时候速度快,同时检索元素的速度也快. 劣势:如果要插入一个元素到数组之间慢:如果要追加的元素数量多于数组的容量,则需要频繁扩容使用Arrays.Arrays.copyOf 重新创建一个合适容量的数组 LinkedList 本质是一个list 优势:追加元素没有容量限制,追加速度快,无论是追加元素到链表哪个位置 劣势:检索元素慢 测试代码如下: package com.drafire.testall.Sevice; import or…
学习List接口实现类 ArrayList  Vector  LinkedList List接口的实现类中最经常使用最重要的就是这三个:ArrayList.Vector.LinkedList. JDK中这三个类的定义: 1.ArrayList<E>: public class ArrayList<E> extends AbstractList<E>         implements List<E>, RandomAccess, Cloneable, ja…