每天学一点之List集合

List集合

java.util.List接口继承自Collection接口

List接口特点:
1、线性存储元素 2、存取有序 3、带有索引可以精确操作集合中的元素 4、可以有重复元素

List集合关心元素是否有序,而不关心是否重复

List接口中常用方法

List除了从Collection集合继承的方法外,增加了一些根据索引来操作集合元素的方法

1、 添加元素
  • void add(int index, E ele)
  • boolean addAll(int index, Collection<? extends E> eles)
2、获取元素
  • E get(int index)
  • List subList(int fromIndex, int toIndex)
3、获取元素索引
  • int indexOf(Object obj)
  • int lastIndexOf(Object obj)
4、删除和替换元素
  • E remove(int index)
  • E set(int index, E ele)

List集合的遍历方式

  • Iterator迭代器
  • 增强for循环
  • 普通for循环
  • ListIterator迭代器
    List 集合额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 列表迭代器对象, ListIterator 接口继承了 Iterator 接口,提供了专门操作 List 的方法:
    • void add():通过迭代器添加元素到对应集合
    • void set(Object obj):通过迭代器替换正迭代的元素
    • void remove():通过迭代器删除刚迭代的元素
    • boolean hasPrevious():如果以逆向遍历列表,往前是否还有元素。
    • Object previous():返回列表中的前一个元素。
    • int previousIndex():返回列表中的前一个元素的索引
    • boolean hasNext():判断是否有下一个元素
    • Object next():获取下一个元素
    • int nextIndex():返回元素的索引

使用方式: ListIterator listIterator = list.listIterator();

List接口的实现类

1、 ArrayList实现类

在这里插入图片描述
比较Vector类底层也使用数组,但是线程安全,效率低,不推荐使用。

ArrayList底层实现:可变长的数组,有索引,查询效率高,增删效率低
    构造方法:
            new ArrayList():
                    jdk6中,空参构造直接创建10长度的数组。
                    jdk7(新版)、jdk8中,默认初始容量0,在添加第一元素时初始化容量为10
             new ArrayList(int initialCapacity):
                    指定初始化容量
    添加元素:add(E e);
    	首次添加元素,初始化容量为10
        每次添加修改modCount属性值
        每次添加检查容量是否足够,容量不足时需要扩容,扩容大小为原容量的1.5倍
    移除元素:remove(E e);
        每次成功移除元素,修改modCount值
        每次成功移除需要移动元素,以保证所有元素是连续存储的(删除操作效率低的原因)
------------------------------
Vector实现类的不足:
	初始容量为10,容量不足时扩容,如果capacityIncrement为0 扩容增加为原来的2,否则容量为旧的长度+capacityIncrement。
2、LinkedList实现类

LinkedList底层存储数据使用链表结构(双向链表),特点:首尾增删快,其他地方需要先查询到再增删,查询慢。
LinkedList底层结构:
在这里插入图片描述
在这里插入图片描述
LinkedList新增了操作首尾元素的方法(首、尾元素的操作效率高):

  • void addFirst(Object obj )
  • void addLast(Object obj )
  • Object getFirst()
  • Object getLast()
  • Object removeFirst()
  • Object removeLast ()

ArrayList添加元素时底层源码

第一次添加数据:

在这里插入图片描述
第十一次添加元素时:
在这里插入图片描述

LikedList添加元素时底层源码

在这里插入图片描述

迭代器的源码分析:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奋斗的JAVA小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值