此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更好的选择?
排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。
事实上,情况并没有那么糟。IIRC,集合。排序方法将列表复制到临时数组,对数组进行排序,清除()
原始列表,然后将数组复制回它。对于足够大的列表,排序阶段将主导复制阶段。
正如您自己所见,代码很简单,而且非常有效,因为它只在必要时创建一个副本。
因此,答案是,除了一种完全不同类型的解决方案之外,没有比这更好的选择了,例如,可以对列表进行排序的解决方案。
(请记住,很少需要这种程度的优化,因此这不是一个非常常见的问题。)
更新:只是事后思考L作为一般规则,编写良好的API不会返回与其可能包含的数据量不合适的数据类型。这并不是说您应该盲目信任它们,但这不是一个完全不合理的假设。
你真的没有比你所拥有的更简单的了——在我看来,这是最有效的。
这就是说,这听起来很像是过早的优化——如果您使用的API的作者更改了链接列表,那么您只需要担心这一点。如果您现在对此感到担忧,那么您可能会花费大量的时间和精力来规划未来的场景,而这些场景甚至可能不会成为现实——这可能是最好花在寻找其他问题来解决的时间。想必,您更改API版本的唯一时间是在您自己的应用程序版本之间-如果有的话,请在此时处理问题。
我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示:
如何将一个var转换为两个var列表? 下面是我的输入变量: 我希望我的结果应该是:
我有我想分批处理的编号列表。
问题内容: 我希望此代码显示: 问题答案: 在将导致的一个单列表。 如果更改为,它将按预期工作。不知道这是否对您有帮助。
这是我从获取请求中获得的响应,如何将此响应转换为Java列表,以便我可以在列表上执行Stream(.)过滤器。
问题内容: 如何转换成? 当然,除了循环地逐项执行之外,我对任何其他答案都感兴趣。但是,如果没有其他答案,我将选择一个作为最佳答案,以证明此功能不是Java的一部分。 问题答案: 没有捷径可转换为因为它不会处理拳击,只会创建你不想要的。你必须制作一个实用程序方法。