java集合类之List

类图:

图片来自:https://www.cnblogs.com/paddix/p/5539326.html

1.ArraylList

(1)定义

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

RandomAccess,可以通过下标随机访问元素;Cloneable,可以复制;Serializable,可以序列化

(2)结构

    用来存储数据的是一个数组,数组的特点:在内存中是连续的,长度固定不可改变。

    ArrayList的默认长度:

  1. 当你创建一个空的ArrayList,默认长度为10;
  2. 当你创建一个有初始化值的ArrayList,则长度为初始化元素的数量;
  3. 创建时声明了长度,则长度为声明的长度;

    ArrayList长度的变化:

  1. 当向ArrayList中插入新元素,而ArrayList中的数组长度不够时,会创建一个新的数组来保存数据。
  2. 数组长度的增长不是每次+1,这样花销太大,因为每次增长都要把旧数组的数据复制到新数组。
  3. 一般情况下,新数组的长度是原长度的1.5倍。
  4. 当原数组过小时,准确说小于默认的长度10,增长计算时,会视其长度为10,简单说,新数组长度为15。

    ArrayList删除元素时:

  1. 仍会使用原数组;
  2. 会把删除的元素之后的元素全部往前移动;
  3. 删除元素越靠前,消耗越大。

(3)特点分析

    数据结构简单

    遍历速度块,下标访问式的for循环速度高于迭代器遍历

    插入删除代价较大,

    新增元素,数组较小时平均消耗较大;数组较大时,平均消耗较小

    线程不安全

2.Vector

    与ArrayList相似,这里简单说一下不同。

    线程安全(最大的特点)

    数组增长,每次为原来的2倍。

3.Stack

    继承自Vector,和我们理解的栈一样,只能在栈尾操作,先进后出,后进先出。

4.LinkedList

(1)定义

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

与ArrayList相比,多继承了一个Deque,Deque是一个双向队列,队首队尾都可以添加弹出。

(2)结构

只有这三个成员:长度,首,尾。

Node子类的结构也很简单。

(3)特点分析

遍历速度较慢,迭代器遍历性能略高于forEach,千万不要使用下标for循环(灾难性的慢)

插入删除速度较快。

新增的话,列表长度较小时优于ArrayList,列表长度较大时不如ArrayList。

综合来看,平时使用ArrayList的场合会更多,只有需要频繁插入删除才会用LinkedList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值