Java List的操作示例

本文详细介绍了Java中List接口的基本概念及其实现方式,包括如何添加、删除、修改和遍历List中的元素。此外还提供了使用ListIterator接口进行遍历的具体示例。

List 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复。

  1. 添加
    void add(element); 尾部添加
    void add(index, element);
    void addAll(collection);
    void addAll(index, collection);
  2. 删除
    Object remove(index);
    boolean removeAll(collection);
  3. 修改
    Object set(index, element);
  4. 获取
    Object get(index);
    int indexOf(object); 获取指定元素的索引
    int lastIndexOf(object);
    List subList(from, to); [from,to)
  5. 判断
    int size();
    boolean isEmpty();
    boolean contains(Object);
  6. 遍历
    可以使用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来完成在迭代过程中对元素需要进行的操作。

遍历示例:

  1. 要逆序遍历某个列表,首先要获得一个ListIterator对象,利用for()循环,以ListIterator类的hasNext()方法作为判断条件,通过循环执行ListIterator类的next()方法将游标定位到列表结尾。
  2. 然后在另一个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 
*/

部分参考:http://www.jb51.net/article/47368.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值