ArrayList的subList的注意事项

93 阅读1分钟

简单使用

import java.util.ArrayList;
import java.util.List;

/**
 * 使用ArrayList的subList的注意事项
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> bookList = new ArrayList<>();
        bookList.add("遥远的救世主");
        bookList.add("背叛");
        bookList.add("天幕红尘");
        bookList.add("人生");
        bookList.add("平凡的世界");
        List<String> luyaoBookList = bookList.subList(3, 5);
        System.out.println(bookList);
        System.out.println(luyaoBookList);

    }
}

运行结果

image.png

修改原集合元素的值,会影响子集合

import java.util.ArrayList;
import java.util.List;

/**
 * 使用ArrayList的subList的注意事项
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> bookList = new ArrayList<>();
        bookList.add("遥远的救世主");
        bookList.add("背叛");
        bookList.add("天幕红尘");
        bookList.add("人生");
        bookList.add("平凡的世界");

        // 修改原集合的值
        bookList.set(3,"路遥");
        List<String> luyaoBookList = bookList.subList(3, 5);
        System.out.println(bookList);
        System.out.println(luyaoBookList);

    }
}

运行结果

image.png

修改原集合的结构,会引起ConcurrentModificationException异常

在 subList 场景中, 高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、
删除均会产生 ConcurrentModificationException 异常


import java.util.ArrayList;
import java.util.List;

/**
 * 使用ArrayList的subList的注意事项
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> bookList = new ArrayList<>();
        bookList.add("遥远的救世主");
        bookList.add("背叛");
        bookList.add("天幕红尘");
        bookList.add("人生");
        bookList.add("平凡的世界");
        List<String> luyaoBookList = bookList.subList(3, 5);
        // 往原集合中添加元素
        bookList.add("美好的一天从早晨开始");
        System.out.println(bookList);
        System.out.println(luyaoBookList);

    }
}

运行结果

image.png

修改子集合元素的值,会影响原集合


import java.util.ArrayList;
import java.util.List;

/**
 * 使用ArrayList的subList的注意事项
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> bookList = new ArrayList<>();
        bookList.add("遥远的救世主");
        bookList.add("背叛");
        bookList.add("天幕红尘");
        bookList.add("人生");
        bookList.add("平凡的世界");
        List<String> luyaoBookList = bookList.subList(3, 5);
        // 修改子集合的值
        luyaoBookList.set(1, "美好的一天从早晨开始");
        System.out.println(bookList);
        System.out.println(luyaoBookList);

    }
}

运行结果

image.png

修改子集合的结构,会影响原集合

import java.util.ArrayList;
import java.util.List;

/**
 * 使用ArrayList的subList的注意事项
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> bookList = new ArrayList<>();
        bookList.add("遥远的救世主");
        bookList.add("背叛");
        bookList.add("天幕红尘");
        bookList.add("人生");
        bookList.add("平凡的世界");
        List<String> luyaoBookList = bookList.subList(3, 5);
        // 修改子集合的值
        luyaoBookList.add("美好的一天从早晨开始");
        System.out.println(bookList);
        System.out.println(luyaoBookList);

    }
}

运行结果

image.png