当前位置: 首页 > 知识库问答 >
问题:

如何将List转换为ArrayList

岳出野
2023-03-14

此API调用返回一个可能较大的列表

排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。因此,我需要将列表转换为ArrayList,以确保程序的实际效率。但是,由于列表很可能已经是ArrayList,因此不必要地创建列表的新ArrayList副本将效率低下。

考虑到这些约束,我提出了以下方法将列表转换为ArrayList:

private static <T> ArrayList<T> asArrayList(List<T> list) {
  if (list instanceof ArrayList) {
    return (ArrayList<T>) (list);
  } else {
    return new ArrayList<T>(list);
  }
}

我的问题是:这是处理具有未知实现的列表的最有效方法吗?有没有更好的方法将列表转换为ArrayList?有没有比将列表转换为ArrayList更好的选择?

共有3个答案

盖诚
2023-03-14

排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。

事实上,情况并没有那么糟。IIRC,集合。排序方法将列表复制到临时数组,对数组进行排序,清除()原始列表,然后将数组复制回它。对于足够大的列表,排序阶段将主导复制阶段。

符正信
2023-03-14

正如您自己所见,代码很简单,而且非常有效,因为它只在必要时创建一个副本。

因此,答案是,除了一种完全不同类型的解决方案之外,没有比这更好的选择了,例如,可以对列表进行排序的解决方案。

(请记住,很少需要这种程度的优化,因此这不是一个非常常见的问题。)

更新:只是事后思考L作为一般规则,编写良好的API不会返回与其可能包含的数据量不合适的数据类型。这并不是说您应该盲目信任它们,但这不是一个完全不合理的假设。

吕霄
2023-03-14

你真的没有比你所拥有的更简单的了——在我看来,这是最有效的。

这就是说,这听起来很像是过早的优化——如果您使用的API的作者更改了链接列表,那么您只需要担心这一点。如果您现在对此感到担忧,那么您可能会花费大量的时间和精力来规划未来的场景,而这些场景甚至可能不会成为现实——这可能是最好花在寻找其他问题来解决的时间。想必,您更改API版本的唯一时间是在您自己的应用程序版本之间-如果有的话,请在此时处理问题。

 类似资料:
  • 我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示:

  • 如何将一个var转换为两个var列表? 下面是我的输入变量: 我希望我的结果应该是:

  • 我有我想分批处理的编号列表。

  • 问题内容: 我希望此代码显示: 问题答案: 在将导致的一个单列表。 如果更改为,它将按预期工作。不知道这是否对您有帮助。

  • 这是我从获取请求中获得的响应,如何将此响应转换为Java列表,以便我可以在列表上执行Stream(.)过滤器。

  • 问题内容: 如何转换成? 当然,除了循环地逐项执行之外,我对任何其他答案都感兴趣。但是,如果没有其他答案,我将选择一个作为最佳答案,以证明此功能不是Java的一部分。 问题答案: 没有捷径可转换为因为它不会处理拳击,只会创建你不想要的。你必须制作一个实用程序方法。