List接口是collection接口的子接口,是单列有序集合
1. List接口的特点
- 有序的
- 可重复
- 具有索引
2. List集合的常用方法
// 1. 在指定的下标位插入元素
list.add(5, 100);
// 3. remove(int index): 移除指定下标位的元素
list.remove(3);
// 这里,由于存在了基本数据类型int和包装类型Integer的重载方法,因此,如果需要按照元素删除,需要进行手动装箱
list.remove(Integer.valueOf(100));
// 4. 将指定下标位的元素,修改成指定的元素
list.set(0, 100);
// *5. 【了解】 替换
// 逻辑:将集合中的每一个元素,都带入到UnaryOperator接口的方法中,用返回值替换原来的元素
list.replaceAll(ele -> ele * 10);
list.replaceAll(ele -> ele % 2 != 0 ? ele * 10 : ele);
// 6. 查: 获取指定下标位的元素
Integer element = list.get(0);
System.out.println(element);
// 8. 获取某一个元素出现的下标
System.out.println(list.indexOf(30));
// 9. 获取某一个元素最后一次出现的下标
System.out.println(list.lastIndexOf(30));
// 7. 截取一个子集合,[fromIndex, toIndex)
List<Integer> result = list.subList(3, 5);
// 2. 在指定的下标位插入多个元素
List<Integer> tmp = new ArrayList<>();
tmp.add(10);
tmp.add(20);
tmp.add(30);
list.addAll(3, tmp);
3. ListIterator 以及List集合的遍历方式
- 通过ListIteration中的add,set,remove可以实现在遍历的同时对集合增删改的功能
- ListIterator可以实现结合的倒序遍历
// ListIterator
// List集合的遍历方式:
// 1. 增强for循环
// 2. forEach
// 3. 下标遍历
// 4. Iterator迭代器
// 5. ListIterator
public class ListIteratorUsage {
public static void main(String[] args) {
// 准备工作:准备一个集合
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
list.add(i);
}
// ListIterator:
// 是在List接口中特有的迭代器,是继承自 Iterator 的
// 1. 可以使用 hasPrevious和 previous 方法,实现倒序的迭代
// 2. 使用 add、set、remove 实现在迭代的同时,修改集合中的数据
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer ele = iterator.next();
// 在迭代的过程中,修改当前指向的元素
// iterator.set(ele * 10);
if (ele.equals(5)) {
// 在迭代的过程中,添加元素
// iterator.add(11);
// 在迭代的过程中,删除元素
iterator.remove();
}
}
System.out.println(list);
}
}