gpt4 book ai didi

java - 在 Java 中的列表的某个索引之后,是否有更快的方法返回子列表?

转载 作者:行者123 更新时间:2023-11-30 08:59:49 26 4
gpt4 key购买 nike

我正在开发一个程序,在该程序中我需要经常截断列表的开头,只截断几个索引。 (有时,只有一个。)然后,必须将新列表传递给另一个方法,该方法最终可能会做同样的事情。

显然,我希望尽可能高效地完成这项工作。在功能方面有一个明显的答案:

for(int i = «intended index»; i < list.size(); i++) newList.add(list.get(i));
nextMethod(newList);

但是,theta 表示法相当可怕。我更喜欢这样的东西:

List newList = list.subset(«intended index», list.size());

但是我找不到这样的东西。

我觉得最大和最小列表索引可能由指针处理。例如,Collections 中是否有这样一种方法,它允许我创建一个引用完全相同数据的子集的列表?或者我应该放弃它并专注于改变我算法的其他部分吗?还是 List 是错误的集合?

最佳答案

这里有几件事需要考虑。首先,API 确实提供了一个 subList()方法。

如果列表是不可变的或未修改的,您可以直接使用 subList() 方法。与迭代器类似,如果列表在结构上发生变化(即大小发生变化等),它们将很快失败。

如果您需要将多个 View 放入同一列表以允许并发修改,则需要使用 concurrent list反而。性能相当糟糕,并非所有 View (子列表、迭代器)都会看到更新的数据,但它是安全的。由于性能似乎是您关心的问题,因此我会尽可能避免这种情况,即使这意味着重构您的代码以避免它。这通常与真正的并发(即线程)一起使用,并且仅在更好的数据结构不合适时才使用。

关于java - 在 Java 中的列表的某个索引之后,是否有更快的方法返回子列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27087693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com