集合篇---List集合

本文介绍了Java中的List集合,它是一个元素有序且可重复的集合,允许根据索引操作元素。重点讨论了ArrayList和Vector类,包括它们基于数组的实现、线程安全性差异以及Stack子类。此外,提到了固定长度的List——Arrays.ArrayList。

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

1.概述

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

List集合里增加了一些根据索引来操作集合元素的方法。

  • void add(int index, Object element):将元素element插入到List集合的index处。
  • boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入到List集合的index处。
  • Object get(int index):返回集合index索引处的元素。
  • int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。
  • int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引。
  • Object remove(int index):删除并返回index索引处的元素。
  • Object set(int index, Object element):将index索引处的元素替换成element对象,返回新元素。
  • List subList(int fromIndex, int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合。

所有的List实现类都可以调用这些方法来操作集合元素。与Set集合相比,List增加了根据索引来插入、替换和删除集合元素的方法。

与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法。

  • boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。
  • Object previous():返回该迭代器的上一个元素。
  • void add():在指定位置插入一个元素。
  • 拿ListIterator与普通的Iterator进行对比,ListIterator增加了向前迭代的功能(Iterator只能向后迭代),而且ListIterator还可通过add方法向List集合中添加元素(Iterator只能删除元素)。

2. ArrayList 和 Vector类

ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。ArrayList或Vector对象使用initialCapacity参数来设置该数组的长度,Object[]数组的长度默认为10。

1. 区别

ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性;但Vector集合则是线程安全的,无须程序保证该集合的同步性。因为Vector是线程安全的,所以Vector的性能比ArrayList的性能要低。

Vector还提供了一个Stack子类,它用于模拟“栈”这种数据结构,“栈”通常是指“后进先出”(LIFO)的容器。最后“push”进栈的元素,将最先被“pop”出栈。与Java中的其他集合一样,进栈出栈的都是Object,因此从栈中取出元素后必须进行类型转换,除非只是使用Object具有的操作。Stack类里提供了如下几个方法。

  • Object peek():返回“栈”的第一个元素,但并不将该元素“pop”出栈。
  • Object pop():返回“栈”的第一个元素,并将该元素“pop”出栈。
  • void push(Object item):将一个元素“push”进栈,最后一个进“栈”的元素总是位于“栈”顶。

2. 固定长度的List

Arrays,该工具类里提供了asList(Object... a)方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值