Java中的List

List是什么

在Java中,List是一个位于java.util包中的接口,它代表了一个有序的集合,也被称作序列。这个接口允许用户精确地控制元素在集合中的插入位置。通过使用整数索引,即元素在列表中的位置,用户可以访问和操作列表中的元素,还可以在列表中搜索特定的元素。

List接口继承自Collection接口,并且有一个抽象实现类AbstractList。Collection接口是Java集合框架中的根接口,它定义了集合的基本操作,如添加、删除和遍历元素。Collection接口进一步继承自Iterable接口,使得实现了Iterable接口的对象可以作为“for-each”循环的目标,从而简化了遍历集合的代码。
下面是List接口及其继承和实现关系的一个概述:
Collection:作为集合层次结构的根接口,它定义了集合的基本特性,包括元素的添加、删除和检查等。集合可以是允许重复元素的,也可以是不允许的;可以是有序的,也可以是无序的。
Iterable:实现了这个接口的对象可以被用作“for-each”循环的目标,这使得遍历集合变得更加方便和简洁。
List:继承自Collection接口,增加了元素的有序性和通过索引访问元素的能力。
List接口的实现类,如ArrayList、LinkedList和Vector等,提供了不同的性能特性,以适应不同的使用场景。

具体实现

在Java中,List接口有几种常见的实现,每种实现都有其特定的用途和性能特点:

  • ArrayList:这是基于动态数组实现的List接口。它允许存储任何类型的Object,并且由于其内部结构,它在随机访问时提供快速的性能。然而,由于ArrayList不是线程安全的,所以在多线程环境中使用时需要额外的同步措施。
  • LinkedList:这是List和Deque接口的实现,基于双向链表的数据结构。它提供了双向遍历的能力,并且允许存储null值。LinkedList在添加和删除元素时表现出色,尤其是当涉及到列表中间或头部的操作时。然而,由于链表的特性,它的随机访问性能不如ArrayList。
  • Vector:这是List接口的一个古老实现,底层也是通过动态数组来存储数据。与ArrayList不同,Vector是线程安全的,因为它的所有公开方法都使用了synchronized关键字进行了同步。然而,这种同步机制也导致了Vector在单线程环境下的性能较低,因此在现代Java应用程序中,通常推荐使用ArrayList或其他并发集合类,如CopyOnWriteArrayList,来替代Vector。

每种List实现的选择取决于具体的应用场景和性能需求。例如,如果你需要频繁地随机访问列表中的元素,ArrayList可能是更好的选择。如果你需要在列表的中间进行大量的插入和删除操作,LinkedList可能更加合适。而如果你的应用场景需要线程安全,并且可以接受较低的性能,Vector可以作为一个选项,尽管在大多数情况下,使用其他并发集合类可能是更好的选择。

常用API

ArrayList():创建一个空的列表。
ArrayList(Collection<? extends E> c):使用指定集合的元素创建列表的副本。
add(E e):在列表末尾添加一个元素。
add(int index, E element):在列表中的指定位置插入一个元素。
get(int index):返回列表中指定位置的元素。
set(int index, E element):用指定的元素替换列表中指定位置的元素。
remove(int index):删除列表中指定位置的元素,并返回被删除的元素。
remove(Object o):删除列表中第一次出现的指定元素。
size():返回列表中的元素数量。
indexOf(Object o):返回列表中第一次出现的指定元素的索引。
lastIndexOf(Object o):返回列表中最后一次出现的指定元素的索引。
iterator():返回列表的迭代器,用于遍历列表。
sort(Comparator<? super E> c):根据指定的比较器对列表进行排序。
ensureCapacity(int minCapacity):如有必要,增加此ArrayList实例的容量以确保它至少可以容纳最小容量参数所指定的元素数。
trimToSize():将此ArrayList实例的容量调整为列表的当前大小。
clear():移除列表中的所有元素。
clone():返回此ArrayList实例的浅拷贝。
serialVersionUID:用于序列化和反序列化过程中的版本控制。
LinkedList():创建一个新的空链表。
LinkedList(Collection<? extends E> c):创建一个包含指定集合元素的新链表。
add(E e):在链表末尾添加一个元素。
add(int index, E element):在链表中的指定位置插入一个元素。
addFirst(E e):在链表头部添加一个元素。
addLast(E e):在链表尾部添加一个元素。
get(int index):返回链表中指定位置的元素。
getFirst():返回链表头部的元素。
getLast():返回链表尾部的元素。
remove(Object o):删除链表中第一次出现的指定元素。
remove(int index):删除链表中指定位置的元素。
removeFirst():删除并返回链表头部的元素。
removeLast():删除并返回链表尾部的元素。
set(int index, E e):将链表中指定位置的元素替换为指定的元素。
size():返回链表中的元素数量。
indexOf(Object o):返回链表中第一次出现的指定元素的索引。
lastIndexOf(Object o):返回链表中最后一次出现的指定元素的索引。
iterator():返回链表的迭代器,用于遍历链表。
sort(Comparator<? super E> c):根据指定的比较器对链表进行排序。
trimToSize():如果链表的容量大于其大小,则减小其容量。
clear():移除链表中的所有元素。
clone():返回此链表实例的浅拷贝。
serialVersionUID:用于序列化和反序列化过程中的版本控制。
Deque接口特有的方法:
offer(E e):在双端队列末尾插入一个元素。
offerFirst(E e):在双端队列头部插入一个元素。
offerLast(E e):在双端队列末尾插入一个元素。
poll():移除并返回双端队列头部的元素。
pollFirst():移除并返回双端队列头部的元素。
pollLast():移除并返回双端队列尾部的元素。
peek():返回双端队列头部的元素但不移除它。
peekFirst():返回双端队列头部的元素但不移除它。
peekLast():返回双端队列尾部的元素但不移除它。
Vector():创建一个初始容量为 10 的空 Vector。
Vector(int initialCapacity):创建一个具有指定初始容量的空 Vector。
Vector(int initialCapacity, int capacityIncrement):创建一个具有指定初始容量和容量增量的空 Vector。
Vector(Collection<? extends E> c):创建一个包含指定集合元素的 Vector。
add(E e):在 Vector 末尾添加一个元素。
add(int index, E element):在 Vector 的指定位置插入一个元素。
addElement(E e):在 Vector 末尾添加一个元素(add 的旧版本)。
get(int index):返回 Vector 中指定位置的元素。
firstElement():返回 Vector 第一个元素。
lastElement():返回 Vector 最后一个元素。
remove(int index):删除 Vector 中指定位置的元素。
remove(Object o):删除 Vector 中第一次出现的指定元素。
removeElement(E e):删除 Vector 中第一次出现的指定元素(remove 的旧版本)。
removeElementAt(int index):删除 Vector 中指定位置的元素(remove 的旧版本)。
set(int index, E element):用指定的元素替换 Vector 中指定位置的元素。
size():返回 Vector 中元素的数量。
indexOf(Object o):返回 Vector 中第一次出现的指定元素的索引。
lastIndexOf(Object o):返回 Vector 中最后一次出现的指定元素的索引。
clear():移除 Vector 中的所有元素。
clone():返回此 Vector 实例的浅拷贝。
serialVersionUID:用于序列化和反序列化过程中的版本控制。
synchronizedList(List<E> list):返回一个与指定列表“同步”的 List 视图。
ensureCapacity(int minCapacity):确保 Vector 能够至少容纳指定数量的元素。
copyInto(Object[] anArray):将 Vector 中的元素复制到给定数组中。
  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值