如何在Java中获取有效的子列表?

2022-09-01 17:59:58

我在Java中有这个奇怪的(我认为)问题。我有一个 ArrayList,我想获取一个子列表。但我得到以下例外。

package javatest;

import java.util.ArrayList;

public class JavaTest {

    public static void main(String[] args) {
        ArrayList<Integer> alist = new ArrayList<Integer>();
        alist.add(10);
        alist.add(20);
        alist.add(30);
        alist.add(40);
        alist.add(50);
        alist.add(60);
        alist.add(70);
        alist.add(80);
        ArrayList<Integer> sub = (ArrayList<Integer>) alist.subList(2, 4);
        for (Integer i : sub)
            System.out.println(i);
    }
}

run: 异常 在线程 “main” java.lang.ClassCastException: java.util.RandomAccessSubList 不能在 javatest 上强制转换为 java.util.ArrayList。JavaTest.main(JavaTest.java:17) Java Result: 1

获取子列表的正确方法是什么?

感谢


答案 1

将其设置为 :

List sublist = new ArrayList();
sublist = new ArrayList<String>(alist.subList(2, 4));

它应该工作


答案 2

您应该尽可能使用集合的接口。您正在向下转换子列表的结果,但 API 指定它返回 (not )。在这里,实现者选择返回不同的类型,以使他们的生活更轻松。ListArrayList

此外,API 文档指定子列表将返回映射到原始列表的列表,因此请注意!


推荐