*阿炮的Java笔记006号*-会持续更新的List笔记

老生常谈…对于大佬们根本都不用看的博客!

对于像我这种菜鸡还是得一步一步的来!如果有错误请大佬们指点指点!

List集合

List 集合存储的是有序的数据集合,数据结构特点是:读取快,修改慢,适合于读取多、写入修改少的场景。
其中ArrayList 类是很常用的 List 实现,底层是用数组实现的。读取元素的时间复杂度是 O(1),修改写入元素的时间复杂度是 O(N)。

List集合的子类

  • ArrayList:底层为数组。
  • LinkedList:底层为链表。
  • Vector:底层为数组,线程安全。(实战场景几乎不用,了解即可)
  • Stack:继承了 Vector,线程安全,先进后出的栈。(了解即可)

List集合的安全实现

Vector 类的数据结构与 ArrayList 非常类似。但它与 ArrayList 的一个最大的不同是:Vector 是线程安全的,而 ArrayList 则不是线程安全的。(全都是sychornized修饰)
Stack 类则是在 Vector 的基础上,实现了一个双向队列。所以它除了是线程安全的之外,也是一个先进后出的 List 实现。

List的常用方法

添加:

//队尾添加
boolean add(E e)
//指定下标添加
void add(int index, E element);
//添加另一个集合中的所有元素
boolean addAll(Collection<? extends E> c);
//指定下标添加另一个集合中的所有元素
boolean addAll(int index, Collection<? extends E> c);

获取:

//根据下标获取元素
E get(int index);
//根据开始下标和结束下标获取新的 List 集合(左闭右开):
List<E> subList(int fromIndex, int toIndex);

获取元素的下标

//根据从前往后的顺序查找下标
int indexOf(Object o);
//根据从后往前的顺序查找下标
int lastIndexOf(Object o);

**注意:**有重复的只返回第一个遇到的元素,如果没有查到就返回-1。

删除

//根据索引删除元素
E remove(int index);
//根据元素删除(删除第一个遇到的)
boolean remove(Object o);
//删除集合中存在入参的集合中所有的元素
boolean removeAll(Collection<?> c);

修改

//在指定下标进行修改
E set(int index, E element);

ArrayList

ArrayList的概况

  • 具备了List接口的特性(有序、重复、索引);
  • 集合底层是实现原理是数组,大小可变;
  • 特点:查询速度快、增删慢;
  • 线程不安全的集合,运行速度快;

ArrayList的扩容

  • JDK7:直接创建了一个初始容量为 10 的数组,每次扩容是原来长度的 1.5 倍;
  • JDK8:一开始创建一个长度为 0 的数组,当添加第一个元素的时候再创建一个容器为 10 的数组,每次扩容是原来长度的 1.5 倍;

LinkedList

LinkedList的概况

  • 具备了List 接口的特性(有序、重复、索引);
  • 集合底层是实现原理是双向链表;
  • 增删速度快、查询慢;
  • 线程不安全的集合,运行速度快;

Vector

Vector的概述

  • 具备了List接口的特性(有序、重复、索引);
  • 集合底层是实现原理是数组,大小可变;
  • 线程安全,运行速度快慢;

Vector的扩容

半步扩容法(即扩容1.5倍)和2倍扩容法(即扩容2倍)
不同编译器扩容方式不同:

编译器扩容倍数
CLANG1.5
MSVC1.5
GCC2

选择不同的构造方式:

  • 如果为无参构造,初始化容量为10,扩容为原容量的2倍;
  • 如果为单参数构造,初始化容量为指定容量,扩容为原容量的2倍;
  • 如果为两个参数的构造,初始化容量为指定容量,扩容为原容量加上扩容长度(ArrayList不存在这种构造方式);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

史上最菜的山炮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值