Java类集之List及其常用子类

List接口

List接口是Collection接口的子接口,与Set不同的是List中的元素是有序且允许重复的。所以List接口提供了根据索引获取元素。
在这里插入图片描述

ArrayList

ArrayList是基于对象数组实现的,ArrayList不是线程同步的,它允许重复元素,允许加入null值。默认扩容长度为原长度的1.5倍。
下面我们从ArrayList的构造方法说起
在这里插入图片描述
第一个无参的构造和传入collection的构造都是Collection接口中指定的,在Collection官方文档中可以看到。
在这里插入图片描述
译文:所有通用的集合实现类(通常通过集合的一个子接口间接实现集合)都应该提供两个“标准”构造函数:一个是void(无参数)构造函数,它创建一个空集合,另一个是具有一个Collection类型参数的构造函数。
然后最后一个构造方法是传入一个整型的initialCapacity,对底层的Object数组长度进行初始化。
注意:这里调用无参构造时,底层数组长度为0,初始化为ArrayList中的 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};只有在调用add方法时才会开始扩容,而调用第二个和第三个构造时,底层数组已经有了指定长度。
我们来看看调用无参构造时ArrayList中发生的变化。
在这里插入图片描述
在对Arraylist进行添加元素时其实只有两个核心方法

  1. ensureCapacityInternal(size + 1);确保当前的数组长度足够大,不够大则需要扩容。
  2. grow(int minCapacity);进行扩容操作的方法,默认是扩容到原来的1.5倍长度。

看过了ArrayList的核心内容扩容,那么我们再看看ArrayList中的主要方法。
1.添加元素
在这里插入图片描述
2.删除元素
在这里插入图片描述
3.修改元素
在这里插入图片描述
4.查询元素
在这里插入图片描述
5.状态判断
在这里插入图片描述
在这里插入图片描述

LinkedList

linkedlist底层是使用双向链表实现,所以linkedlist的构造方法并不能赋值初始容量,他的构造方法就是Collection中规定的两个构造器。需要注意的一点是linkedlist既实现了List接口,也实现了Queue接口,所以他也具有Queue的一些特性。他不仅有单纯的list的一些方法,也是实现了数据结构中栈和队列的一些操作方法。
关于栈的操作
在这里插入图片描述
在这里插入图片描述
关于队列的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Linkedlist也不是线程同步的,他允许重复元素,允许null值,并且linkedlist中不仅仅存储了First节点,还存储了当前节点,提高了尾部插入的效率。

Vector

Vector是Java中的元老类,他是线程安全的,其内部实现和ArrayList非常相似,只是在进行无参初始化的时候直接对底层数据进行了长度定义(ArrayList是在开始使用的时候才进行扩容),Vectory默认的扩容长度是两倍,当然你可以在创建时传入扩容增长capacityIncrement 。

三者比较与联系

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值