List接口

Collection接口

首先先来看这张图在这里插入图片描述
在这里插入图片描述
通过这张两张图可以看到,list和set是实现了collection接口的,而Map则不同,它是另一个单独的接口

List

  • List是一个有序的,允许重复的有序集合(也称序列)
  • 用户可以精确的控制列表中元素插入的位置,还可以通过整数索引来访问元素
  • 可以插入多个null元素
  • 插入元素的顺序即是元素在集合中的位置
  • 常用的实现类有: ArrayList(非线程安全),LinkedList,Vector(线程安全的),其中用的最多的还是ArrayList,因为它提供了通过索引随意访问元素的功能,而LinkedList则适用于要经常添加删除元素的场景中

实现类 ArrayList

该类是List的实现类,所在的包为—java.util.ArrayList,其中E表示泛型
ArrayList的长度不固定,而且也可以存储不同类型的数据,允许所有元素,包括null
每个ArrayList实例都有一个容量 , 容量是用于存储列表中的元素的数组的大小。 它总是至少与列表大小一样大, 当元素添加到ArrayList时,其容量会自动增长
它是一个动态数组, 什么意思呢, 就是当你需要删除第一个元素的时候, 是我们使用ArrayList最不想看到的一种情况, 因为当第一个元素被删除之后, 第二位及其之后的元素都会向前移动一位, 这也就是所谓的"动态数组", 这也就是为什么在删除或添加集合中间的数据时效率并不高


ArrayList的构造方法

构造方法
ArrayList()
构造一个初始容量为十的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
ArrayList(int initialCapacity)
构造具有指定初始容量的空列表。

ArrayList的常用方法

添加元素
boolean add(E e)
将指定的元素追加到此列表的末尾。
void add(int index, E element)
在此列表中的指定位置插入指定的元素。

删除元素
void clear()
从列表中删除所有元素。
E remove(int index)
删除该列表中指定位置的元素。
boolean remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)。

获取集合的长度
int size()
返回此列表中的元素数。

集合排序(注意,最好是存储整数的时候)
void sort(Comparator<? super E> c)
使用提供的 Comparator对此列表进行排序以比较元素。


实现类 LinkedList

LinkedList的包是java.util.LinkedList, 它就像是一个链条一样,是一个双向链表的形式, 所以在添加删除的操作时, LinkedList效率就会特别高(注意, 它是线程不同步的哦, 也就是非线程安全的)

那么, LinkedList和ArrayList的区别在哪里呢?

因为LinkedList是一个双向链表, 所以是可以在指定的位置插入或者删除指定的元素的, 而且插入时可以直接原地插入删除的, 不需要移动其他的元素, 而且可以在结构的前后插入数据, 进行双向遍历, 对于这一点ArrayList效率是不如LinkedList的, 但是,如果是查询数据呢? ArrayList是可以通过下标直接获取的, 而LinkedList却做不到, 它需要进行遍历才行
总结
对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针(遍历)
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

LinkedList的构造方法

LinkedList()
构造一个空列表。
LinkedList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。

LinkedList常用方法

添加元素
boolean add(E e)
将指定的元素追加到此列表的末尾。
void add(int index, E element)
在此列表中的指定位置插入指定的元素。
void addFirst(E e)
在该列表开头插入指定的元素。
void addLast(E e)
将指定的元素追加到此列表的末尾。
boolean offer(E e)
将指定的元素添加为此列表的尾部(最后一个元素)。
boolean offerFirst(E e)
在此列表的前面插入指定的元素。

删除元素
void clear()
从列表中删除所有元素。
E remove(int index)
删除该列表中指定位置的元素。
boolean remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)。
E removeFirst()
从此列表中删除并返回第一个元素。

判断是否包含元素
boolean contains(Object o)
如果此列表包含指定的元素,则返回 true 。

获得元素
E get(int index)
返回此列表中指定位置的元素。
E getFirst()
返回此列表中的第一个元素。
E getLast()
返回此列表中的最后一个元素。

返回元素出现的位置
int indexOf(Object o)
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
int lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

获得集合元素个数
int size()
返回此列表中的元素数。

注意,LinkedList才有将元素添加到集合头部的方法哦


实现类 Vector

这个类很有特点,它是线程同步的,也就是线程安全的,如果不需要线程同步的话,建议还是使用ArrayList代替Vector
Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。
它是存在于import java.util包下的 ---- import java.util.Vector;

Vector的构造方法

Vector()
构造一个空向量,使其内部数据数组的大小为 10 ,标准容量增量为零。
Vector(Collection<? extends E> c)
构造一个包含指定集合元素的向量,按照集合的迭代器返回的顺序。
Vector(int initialCapacity)
构造具有指定初始容量并且其容量增量等于零的空向量。
Vector(int initialCapacity, int capacityIncrement)
构造具有指定的初始容量和容量增量的空向量。

Vector的常用方法

添加元素
boolean add(E e)
将指定的元素追加到此Vector的末尾。
void add(int index, E element)
在此Vector中的指定位置插入指定的元素。
void addElement(E obj)
将指定的组件添加到此向量的末尾,将其大小增加1。

删除元素
void clear()
从此Vector中删除所有元素。(这个是删除集合中所有的元素)
E remove(int index)
删除此向量中指定位置的元素。
boolean remove(Object o)
删除此向量中指定元素的第一个出现如果Vector不包含元素,则它不会更改。也就是说呢,如果没有找到该元素则不会执行任何的操作
boolean removeAll(Collection<?> c)
从此Vector中删除指定集合中包含的所有元素。

替换元素
E set(int index, E element)
用指定的元素替换此Vector中指定位置的元素。

设置集合大小
void setSize(int newSize)
设置此向量的大小。

获取集合有效元素个数(集合的长度)
int size()
返回此向量中的组件数。

示例

import java.util.Iterator;
import java.util.Vector;

public class Text {
	public static void main(String[] args) {
		Vector v = new Vector();// 创建集合  没有指定泛型
		v.add(1);// 添加元素
		v.add(2);
		
		// 创建迭代器
		Iterator it = v.iterator();
		while(it.hasNext()) {// 该参数为判断是否还有下一个值   返回值Boolean  如果集合为空则循环将一次也不执行
			System.out.println(it.next());// 如果有值,则输出这个值    下次判断时跳过该值
		}
	}
}

List总结

  • List作为Collection接口的子接口,可以使用Collection接口里的全部方法
  • List集合可以根据索引来插入、替换和删除集合元素
  • List集合可以使用普通for循环来遍历集合元素。List判断两个对象相等只要通过equals方法比较返回true即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL list是C++标准模板库中的一个双向链表容器,它提供了一系列接口用于操作和管理链表中的元素。下面是一些常见的STL list接口: 1. 构造函数: - list(size_type n, const value_type& val = value_type()):构造包含n个值为val的元素list。 - list():构造一个空的list。 - list(const list& x):拷贝构造函数,用于复制另一个list的内容构造新的list。 - list(InputIterator first, InputIterator last):用[first, last)区间中的元素构造list。 2. 容器大小: - size():返回list元素的个数。 - empty():检查list是否为空。 3. 元素访问: - front():返回list中第一个元素的引用。 - back():返回list中最后一个元素的引用。 4. 插入和删除元素: - push_front(const value_type& val):在list的开头插入一个元素。 - pop_front():移除list的第一个元素。 - push_back(const value_type& val):在list的末尾插入一个元素。 - pop_back():移除list的最后一个元素。 - insert(iterator position, const value_type& val):在指定位置之前插入一个元素。 - erase(iterator position):移除指定位置的元素。 - erase(iterator first, iterator last):移除[first, last)区间中的元素。 5. 元素操作: - clear():移除list中的所有元素。 - remove(const value_type& val):移除所有等于val的元素。 - unique():移除所有相邻重复的元素。 - sort():对list中的元素进行排序。 - reverse():反转list元素顺序。 你可以参考C++官方文档(https://cplusplus.com/reference/list/list/)了解更多关于STL list接口和用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值