集合家族——List集合汇总
一、概述
List继承了Collection,是有序的列表。
可重复数据
实现类有ArrayList、LinkedList、Vector、Stack等
- ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!
- LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!
- Vector是基于数组实现的,是一个矢量队列,是线程安全的!
- Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)
二、情景使用
1. 当集合中对插入元素数据的速度要求不高,但是要求快速访问元素数据,则使用ArrayList!
2. 当集合中对访问元素数据速度不做要求不高,但是对插入和删除元素数据速度要求高的情况,则使用LinkedList!
3.当集合中有多线程对集合元素进行操作时候,则使用Vector!但是现在BVector现在一般不再使用,如需在多线程下使用,可以用CopyOnWriteArrayList,在java.util.concurrent包下。
4.当集合中有需求是希望后保存的数据先读取出来,则使用Stack!
三、各自简介
3.1 ArrayList
ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数 组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进 行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除,线程不安全。
3.2 LinkedList
LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较 慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆 栈、队列和双向队列使用。 增删效率较高,查询效率较低,线程不安全
3.3 Vector
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一 个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此, 访问它比访问ArrayList慢。 查询效率较高,增删效率较低,线程安全。
3.4 Stack
后进先出(LIFO)的对象堆栈。继承了Vector ,也是一个数组。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。
四、分方面比较
4.1.底层数据结构
ArrayList、Vector底层依赖数组,查询效率较高,增删效率较低(因为Vector是线程安全的,整体效率比ArrayList低)
LinkedList底层依赖双向循环链表,增删效率较高,查询效率较低
4.2.存储元素方面
ArrayList、Vector、LinkedList中的元素有序、可重复、允许null值
4.3.扩容方面
ArrayList一次扩容1.5倍
Vector根据增量扩容,增量为0,扩容2倍;否则原容量+增量
LinkedList没有扩容
4.4.线程安全方面
ArrayList、LinkedList线程不安全(如果有多个线程需要同时访问List集合中的元素,可以考虑使用Collections将集合包装成线程安全的集合)
Vector线程安全
五、面试题
5.1 ArrayList与Vector的异同:

补:都支持fail-fast机制
5.2 ArrayList与LinkedList的异同
- 两者都是List接口的实现类
- ArrayList是基于动态数组的数据结构,而LinkedList是基于链表的数据结构
- 对于随机访问get和set(查询操作),ArrayList要优于LinkedList,因为LinkedList要移动指针
- 对于增删操作(add和remove),LinkedList优于ArrayList
集合家族——List集合汇总的更多相关文章
- Collection集合家族
集合家族 数组:存储相同类型的多个元素 对象:存储不同类型的多个元素 集合:存储多个不同类型的对象 List List继承自Collection接口,是有序可重复的集合. 它的实现类有:ArrayLi ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...
- redis有序集合性能 列表、集合、有序集合
https://www.cnblogs.com/pirlo21/p/7120935.html 1.1 列表 列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串 ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- C#语言基础——集合(ArrayList集合)
集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- ArrayList集合 、特殊集合
一.ArrayList集合 集合内可以放不同类型的元素 另:object类型为所有数据类型的基类 添加元素:.add(); 清空集合:al.clear(); 克隆集合:.clone(); 判断是否包含 ...
- 2016年10月16日--ArrayList集合、特殊集合
ArrayList集合 使用前引用 using System.Collections; ArrayList集合 实例化.初始化 ArrayList al = new ArrayList(); Arra ...
随机推荐
- RabbitMq的环境安装
1.如图第一个是erlang语言的安装包,第二个是rabbitmq的安装包. 2.配置erlang语言环境,因为rabbitmq由erlang语言编写的,所以需要配置erlng语言环境. erlang ...
- (八)easyUI之Accordion折叠面板:动态面板
二.动态面板 数据库设计 函数设计:该函数用于获取某个节点的所有子节点 CREATE FUNCTION fn_getAddress_ChildList_test(rootId INT) RETURNS ...
- jQuery组件封装之return this.each(function () {});
记录一下自己的调试历程 组件封装经常看到这么一段代码 $.fn.plugin = function (options) { return this.each(function (i,t) { new ...
- 【小知识点】解决Chrome动画”卡顿”的办法
为动画DOM元素添加CSS3样式-webkit-transform:transition3d(0,0,0)或-webkit-transform:translateZ(0);这两个属性都会开启GPU硬件 ...
- 2019 GIAC-全球互联网架构大会课件
百度云:https://pan.baidu.com/s/1Lt40UTP3hCIVS7LhPl2bKw密码:ovrh
- IntelliJ IDEA控制台启动Tomcat输出中文乱码问题
IntelliJ IDEA控制台输出中文乱码问题 1. 先解决Tomcat中文乱码问题 参考 Tomcat 输出日志出现中文乱码 2. 解决Idea配置问题 打开IntelliJ IDEA本地安装目 ...
- eclipse开发scrapy爬虫工程,附爬虫临门级教程
写在前面 自学爬虫入门之后感觉应该将自己的学习过程整理一下,也为了留个纪念吧. scrapy环境的配置还请自行百度,其实也不难(仅针对windows系统,centos配置了两天,直到现在都没整明白) ...
- http服务详解(1)
前言:要熟练掌握一个服务,首先需要非常了解这个服务的工作过程. 跨网络的主机间通讯 在建立通信连接的每一端,进程间的传输要有两个标志: IP地址和端口号,合称为套接字地址 socket address ...
- PAT Basic 1070 结绳 (25 分)
给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...
- maven jar 包不在项目中
maven update project maven build