如何从列表中转换数组列表<><>

2022-08-31 16:40:55

有人可以解释一下为什么我不能用第一种方法来施法,而我用第二种方法呢?谢谢。List<>ArrayList<>

第一种方法:

ArrayList<Task> tmp = ((ArrayList<Task>)mTrackytAdapter.getAllTasks(token));

第二种方法:

ArrayList<Task> tmp = new ArrayList<Task>(mTrackytAdapter.getAllTasks(token));

答案 1

当你做第二个列表时,你正在制作一个新的数组列表,你不是在试图假装另一个列表是一个数组列表。

我的意思是,如果原始列表作为链接列表或某些自定义列表实现,该怎么办?你不会知道的。如果您确实需要从结果中制作数组列表,则首选第二种方法。但是你可以把它作为一个列表,这是使用接口的最佳优势之一!


答案 2

当您使用第二种方法时,您将使用其预定义的值初始化数组列表。就像一般情况下我们做 ArrayList listofStrings = new ArrayList<>();假设您有一个包含值的数组,现在您要将此数组转换为数组列表。

您需要首先使用数组 utils 从数组中获取列表。因为 ArrayList 是实现 List 接口的具体类型。不能保证方法 asList 将返回这种类型的实现。

List<String>  listofOptions = (List<String>) Arrays.asList(options);

然后,您可以使用数组列表的用户构造函数以使用预定义的值进行实例化。

ArrayList<String> arrlistofOptions = new ArrayList<String>(list);

因此,您的第二种方法是,您已经传递了值,这些值将使用列表元素来初始化数组列表。

更多

从 Arrays.asList 返回的 ArrayList 不是实际的 arraylist,它只是一个包装器,不允许在列表中进行任何修改。如果您尝试在 Arrays.asList 上添加或删除,它将为您提供

不支持的操作异常


推荐