如何从 List<> 中转换 ArrayList<>

新手上路,请多包涵

有人可以解释一下为什么我不能用第一种方法将 List<> 投射到 ArrayList<> 而我用第二种方法吗?谢谢你。

第一种方法:

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

第二种方法:

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

原文由 Eugene 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

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

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

原文由 corsiKa 发布,翻译遵循 CC BY-SA 2.5 许可协议

当您使用第二种方法时,您正在使用其预定义值初始化 arraylist。就像我们通常做的那样

** ArrayList listofStrings = new ArrayList<>(); **

假设您有一个包含值的数组,现在您想将此数组转换为数组列表。

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

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

然后你可以使用 arraylist 的 constructoru 来实例化预定义的值。

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

所以你的第二种方法是你已经传递了将用列表元素实例化 arraylist 的值。

而且

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

不支持的操作异常

原文由 Harsh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题