java-List
每日一言
People who neglect to make efforts or who don’t take any actions at all are always the ones who dream that someday they will suddenly become wildly successful. – Misaki Nakahara
from Welcome to the N.H.K.
列表(Lists)
ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它没有固定大小的限制,我们可以添加或删除元素。
ArrayList 实现了List接口。
- 优点:高效的随机访问和快速的尾部插入
- 缺点:中间插入和删除相对较慢
创建ArrayList
ArrayList类位于java.util 包中。使用前需要引入:
1 |
|
- E : 泛型数据类型,用于设置objectName 的数据类型,只能为引用数据类型。
简单回顾:
Java数据类型
在 Java 中,数据类型分为两大类:
- 基本数据类型 (Primitive Types) :这些是 Java 语言内置的类型,直接存储数据值。它们包括
int
,byte
,short
,long
,float
,double
,boolean
,char
。 - 引用数据类型 (Reference Types) :这些类型存储的是对象的 引用 (内存地址),而不是对象本身。这包括所有的类(如
String
,Integer
,ArrayList
, 以及你自己创建的类)、接口、数组等。
所以当我们想要创建基本类型的ArrayList时,我们应该使用它们对应的包装类(Wrapper Class).
int
->Integer
double
->Double
boolean
->Boolean
char
->Character
1 |
|
操作ArrayList
ArrayList 时一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
添加元素
ArratList 使用add()方法添加元素。
1 |
|
注:打印一个类的时候,会自动调用该类的toString方法。
所以上述代码打印结果与下面的代码一致:
1 |
|
打印结果为:
1 |
|
访问元素
访问ArrayList 中的元素使用get()
1 |
|
输出:
1 |
|
修改元素
修改ArrayList中的元素使用,使用set()方法,set(int index, E element)方法,index表示要替换的元素的位置,第二个元素是新元素(element),表示要新设的值:
1 |
|
结果:
1 |
|
删除元素
删除ArrayList中的元素可以使用remove()方法:
1 |
|
删除元素后,后面的元素会向前补齐。输出结果:
1 |
|
计算大小
可以通过size() 方法获取ArrayList的大小:
1 |
|
引用列表
java中的基本类型对应的引用类:
基本类型 | 引用类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
列表的排序
Arrays只能对于各种类的数组进行排序,不能传入ArrayList参数。所以对于列表的排序我们使用Collections类。
1 |
|
Java ArrayList方法
Java ArrayList 常用方法列表如下:
方法 | 描述 |
---|---|
add() | 将元素插入到指定位置的 arraylist 中 |
addAll() | 添加集合中的所有元素到 arraylist 中 |
clear() | 删除 arraylist 中的所有元素 |
clone() | 复制一份 arraylist |
contains() | 判断元素是否在 arraylist |
get() | 通过索引值获取 arraylist 中的元素 |
indexOf() | 返回 arraylist 中元素的索引值 |
removeAll() | 删除存在于指定集合中的 arraylist 里的所有元素 |
remove() | 删除 arraylist 里的单个元素 |
size() | 返回 arraylist 里元素数量 |
isEmpty() | 判断 arraylist 是否为空 |
subList() | 截取部分 arraylist 的元素 |
set() | 替换 arraylist 中指定索引的元素 |
sort() | 对 arraylist 元素进行排序 |
toArray() | 将 arraylist 转换为数组 |
toString() | 将 arraylist 转换为字符串 |
ensureCapacity() | 设置指定容量大小的 arraylist |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 |
retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 |
containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 |
trimToSize() | 将 arraylist 中的容量调整为数组中的元素个数 |
removeRange() | 删除 arraylist 中指定索引之间存在的元素 |
replaceAll() | 将给定的操作内容替换掉数组中每一个元素 |
removeIf() | 删除所有满足特定条件的 arraylist 元素 |
forEach() | 遍历 arraylist 中每一个元素并执行特定操作 |
Java LinkedList(链表)
一下情况使用链表:
- 需要通过循环迭代的方式来访问列表中的某些元素
- 需要频繁的列表开头,中间,末尾等位置进行添加和删除操作
LinkedList 继承自:AbstractSequentialList类。同时实现了以下接口:
- Queue(普通的队列)
- List(列表)
- Deuqe(双端队列,可用作栈)
- Cloneable(可以克隆)
- Serializable(可支持序列化)
使用LinkedList
引入:
1 |
|
普通创建方法:
1 |
|
使用集合创建:
1 |
|
这个构造函数会创建一个新的 LinkedList
,并将参数 c
中所有元素按照它们在 c
中的迭代顺序添加到这个新的 LinkedList
中。
LinkedList的三种用法
链表(List接口)
对于链表,我们可以直接使用add方法进行添加,add方法继承自List接口。
1 |
|
移除元素使用remove():
1 |
|
作为Queue使用
它实现了 Queue
接口(通过实现 Deque
接口间接实现)。
1 |
|
作为栈使用
它实现了 Deque
接口,而 Deque
接口本身就提供了栈操作所需的方法。
1 |
|
其他方法
方法 | 描述 |
---|---|
public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |