List 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复。
- 添加
void add(element); 尾部添加
void add(index, element);
void addAll(collection);
void addAll(index, collection); - 删除
Object remove(index);
boolean removeAll(collection); - 修改
Object set(index, element); - 获取
Object get(index);
int indexOf(object); 获取指定元素的索引
int lastIndexOf(object);
List subList(from, to); [from,to) - 判断
int size();
boolean isEmpty();
boolean contains(Object); - 遍历
可以使用Iterator接口的子接口ListIterator来完成在迭代中对集合元素进行的增删改查,不会抛出并发修改的异常。
线程只操作迭代对象,不修改集合,这就不是并发的操作,调用的是迭代对象ListIterator中自己的增删改方法,而不是调用集合中的方法。
// 正向
ListIterator<E> it = list.listIterator();
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("a")){
it.set("abc"); // 替换next()返回的元素
}
}
// 正向2
for(int x=0; x<list.size(); x++){
System.out.println("get:"+list.get(x));
}
// 反向
ListIterator<E> it = list.listIterator();
for(it = list.listIterator(); it.hasNext();) { // 先将游标定位到列表结尾
it.next();
}
while(it.hasPrevious()){
System.out.print(" "+it.previous());
}
注意:
集合和迭代器同时对元素进行操作,容易产生异常,如一个线程对collection迭代,另一个对Collection进行修改的时候,就会出现 java.util.ConcurrentModificationException
因此,在迭代过程中,不要使用集合操作元素,容易出现异常。可以使用Iterator接口的子接口ListIterator来完成在迭代过程中对元素需要进行的操作。
遍历示例:
- 要逆序遍历某个列表,首先要获得一个ListIterator对象,利用for()循环,以ListIterator类的hasNext()方法作为判断条件,通过循环执行ListIterator类的next()方法将游标定位到列表结尾。
- 然后在另一个for循环中,以ListIterator类的hasPrevious()方法作为判断条件,通过ListIterator类的previous()方法逆序输出列表中的元素。
import java.util.*;
import java.util.Scanner;
public class Test {
public static void main(String[] argv) {
List<Integer> list = new ArrayList<Integer>(); // 创建列表
for (int i = 0; i < 10; i++) { // 向列表中增加10个元素
list.add(i);
}
Iterator it = list.iterator();
System.out.print("ArrayList集合中的元素为:");
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
ListIterator<Integer> li = list.listIterator(); // 获得ListIterator对象
for (li = list.listIterator(); li.hasNext();) { // 将游标定位到列表结尾
li.next();
}
System.out.print("逆序后为:");
for (; li.hasPrevious();) { // 逆序输出列表中的元素
System.out.print(li.previous() + " ");
}
}
}
// 输出:
/*
ArrayList集合中的元素为:0 1 2 3 4 5 6 7 8 9
逆序后为:9 8 7 6 5 4 3 2 1 0
*/
本文详细介绍了Java中List接口的基本概念及其实现方式,包括如何添加、删除、修改和遍历List中的元素。此外还提供了使用ListIterator接口进行遍历的具体示例。
3019

被折叠的 条评论
为什么被折叠?



