List接口及其主要实现类

本文深入解析Java中的List接口及其主要实现类,包括ArrayList、Vector、Stack和LinkedList的特点和使用场景,对比不同数据结构的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

List接口继承和扩展了Collection接口,List接口表示具有顺序的集合,其中可以包含重复元素。使用此接口的实现类时,可以对列表中每个元素的插入位置进行精确的控制,用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。List接口中声明的常用方法如表1所示

表1 List接口中声明的常用方法
方法声明方法功能
void add(int index,Object element)在列表的index位置添加元素
Object remove(int index)删除列表中index位置的元素
Object get(int index)返回列表index位置的元素
Object set(int index,Object element)用指定元素替换列表中指定位置的元素
int indexOf(Object o)返回列表中首次出现指定元素的索引,如果列表中不包含此元素,则返回-1
int lastIndexOf(Object o)返回列表中最后出现指定元素的索引,如果列表中不包含此元素,则返回-1

List接口的实现类主要有ArrayList、Stack、Vector和LinkedList。

 

ArrayList类

ArrayList类以数组为数据结构实现了List接口,用于表述长度可变的数组列表。在ArrayList中使用对象数组保存数据,调用new ArrayList()后,它会默认初始化一个size=10的数组。每次add操作都要检查数组容量,如果不够,重新设置一个初始容量为1.5倍大小的新数组,然后再把每个元素复制过去。在数组中间插入或删除,都要移动后面的所有元素。

ArrayList实际上是一种容器(Collection),其中可以保存任意数量的元素,每个元素都是一个对象。声明和创建ArrayList对象时,还需要指定元素的类型,例如

ArrayList<String> notes=new ArrayList<String>();

ArrayList类中的常用方法

ArrayList类中的常用方法
方法声明方法功能
public boolean add(E o)向ArrayList容器中添加元素
public int size()获得ArrayList容器中元素的个数
public E get(int index)返回index位置的元素
public E remove(int index)删除index位置的元素

 

 

Vector向量

Vector类也实现了List接口,也用于表述长度可变的对象数组表列。与ArrayList的差别是:Vector是同步(线程安全)的,运行效率低,主要用于在线程环境中;而ArrayList是不同步的,适合在单线程环境中使用。除了实现了List接口中定义的方法外,Vector常用方法如下表所示

Vector类中的常用方法
方法声明方法功能
public Vector()构造一个空向量,使其内部数据数组的大小为10,其标准容量增量为零
public E elementAt(int index)返回index位置的元素
public void addElement(E obj)在向量末尾添加元素
public void removeElementAt(int index)移除index位置的元素
public void insertElementAt(E obj,int index)将指定元素插入到指定位置
public boolean removeElement(Object obj)从此向量中移除第一个匹配项
public void remove AllElements()从此向量中移除全部元素,并将其大小设置为零
public Object[] toArray()返回一个数组,包含此向量中以正确顺序存放的所有元素

 

 

Stack堆栈

堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。java.util.Stack类继承了Vector类,对应数据结构中以“后进先出”方式存储和操作数据的线性表,即对象栈。

Stack类中常用的方法
方法声明方法功能
pubic Stack()创建一个空Stack
pubic Object push(E item)把项压入栈顶
public Object pop()移除栈顶元素
public Object peek()查看栈顶元素
public boolean empty()判断栈是否为空
public int search(Object o)返回对象在栈中的位置,以1为基数

 

 

LinkedList队列

LinkedList实现的是一个双向链表。每个节点除含有元素外,还包含向前、向后的指针。在链表结构中,每个元素都拥有两个指针属性,一个是指向上一个元素的previous指针,一个是指向下一个元素的next指针,第一个元素的previous指针指向“空”,最后一个元素的next指针指向“空”。增加结点,只会对链表的指针进行操作,速度快。LinkedList有双向队列的特征,在链表两端可增删数据。使用index查找对象时,会以index和size/2比较,从前或从后向中间搜索。

比较ArrayList和LinkedList的结构,可以得到以下结论。

ArrayList的remove和add(index,Object)操作代价高,需要移动后面的每个元素。

LinkedList采用链表数据结构实现,便于元素的插入和删除,它的get(index)操作代价高,要先循环遍历list找到Object

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值