java list 接口_Java 集合 List接口

[TOC]

List接口

概述有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

Collection将集合划分为两大类:List集合

Set集合

List接口的特点有序【存储有序】

可重复

可以存储 null值

部分子集合线程安全,部分不安全 例如 ArrayList 和 Vector

有索引,针对每个元素能够方便地查询和修改

判断元素是否重复依赖于equals方法

​ a. 如果元素是系统类,不需要重写equals方法

​ b. 如果是自定义类,就需要我们按需求重写 equals方法

List接口的常用方法

void add(int index, E element) 在指定 index 索引处理插入元素 element

boolean addAll(int index, Collection extends E> c) 在指定 index 索引处理插入集合元素 c

删除

E remove(int index) 删除指定索引 index 处的元素

修改

E set(int index, E element) 修改指定索引 index 处的元素为 element

遍历

E get(int index) + int size() for循环遍历集合中的每一个元素 ListIterator listIterator() 通过列表迭代器遍历集合中的每一个元素 ListIterator listIterator(int index) 通过列表迭代器从指定索引处开始正向或者逆向遍历集合中的元素

获取

E get(int index) 获取指定索引处的元素 int indexOf(Object o) 从左往右查找,获取指定元素在集合中的索引,如果元素不存在返回 -1 int lastIndexOf(Object o) 从右往左查找,获取指定元素在集合中的索引,如果元素不存在返回 -1 List subList(int fromIndex, int toIndex) 截取从 fromIndex 开始到 toIndex-1 处的元素

List接口的遍历方式toArray

Iterator

foreach

普通for

ListIterator

List接口去除重复元素

​ 方式一:创建一个新的集合去除重复元素再使用地址传递

​ 方式二:在原集合的基础上使用选择排序思想去除重复元素

并发修改异常的处理

异常名称:并发修改异常 java.util.ConcurrentModificationException

产生原因:在使用迭代器迭代的同时使用原集合对元素做了修改

解决办法:使用 toArray 方法

使用 普通 for 遍历

使用 ListIterator 遍历集合并且使用 列表迭代器修改元素

Set

Set接口的特点:

1.无序 【存储无序】

2.唯一

3.可以存储null值,但是null不能重复

ArrayList

概述List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector类,除了此类是不同步的。)

特点底层数据结构是数组

增加和删除的效率低,查询和修改的效率高

能够存储 null 值

线程不安全,效率高 可以通过 Collections.synchronizedList();变安全

有索引,能够方便检索

元素可重复,我们自己可以通过 选择排序去重复

不可以排序,但是可以通过 Collections.sort();方法排序

注:ArrayList中常用的方法全部来自于 父类 Collection,List,Object.这里不再做详细叙述。

Vector

概述Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

特点底层数据结构是数组

有索引,能够方便检索

增加和删除的效率低,查询和修改的效率高

线程安全,效率低

能够存储 null 值

元素可重复【我们自己可以通过选择排序思想去除重复元素】

不可以排序,但是可以通过 Collections.sort();方法排序

常用方法

增加

public synchronized void addElement(E obj) 添加元素 obj 到集合中 public synchronized void insertElementAt(E obj, int index) 在指定索引 index 处插入元素 obj

删除

public synchronized void removeElementAt(int index) 移除指定索引 index 处的元素 public synchronized void removeAllElements() 移除所有元素

修改

public synchronized void setElementAt(E obj, int index) 修改指定索引 index 的元素为 obj

遍历

public synchronized E elementAt(int index) + size() for循环遍历集合中的所有元素 public synchronized Enumeration elements() 使用 Enumeration 迭代器遍历集合中的元素

获取

public synchronized E firstElement() 获取集合中的第一个元素 public synchronized E lastElement() 获取集合中的最后一个元素 public synchronized E elementAt(int index) 获取指定索引 index 的元素

相关面试题

ArrayList和Vector的区别? 1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

Stack

概述Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

特点基于栈结构的集合,先进后出

Stack 类是 Vector类的子类,所以该类也是线程安全的,效率低,建议使用 Deque接口的实现类

常用方法

E push(E item) 将元素压入栈底 E pop() 将元素从栈结构中弹出,并作为此函数的值返回该对象,此方法会影响栈结构的大小 E peek() 查看堆栈顶部的对象,但不从栈中移除它。 boolean empty() 测试栈是否为空。 int search(Object o) 返回对象在栈中的位置,以 1 为基数。

注:如果栈中元素为空,再尝试弹栈,将会抛出 EmptyStackException 异常, 而不是 NoSuchElementException

Queue

概述在处理元素前用于保存元素的 collection。除了基本的 null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

特点该接口是队列接口的根接口,先进先出

该接口提供队列相关两种形式的方法,一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

常用方法

| | 抛出异常 | 返回特殊值 | | ---- | --------- | ---------- | | 插入 | add(e) | offer(e) | | 移除 | remove() | poll() | | 检查 | element() | peek() |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值