【发布时间】:2015-11-19 15:06:22
【问题描述】:
我的问题
我有一个包含自定义变量的固定大小的 ArrayList。尽管 ArrayList 具有固定大小,但有时它们中的很多实际上是空的。问题是我需要返回没有空变量的 ArrayList。 需要注意的重要一点: ArrayList 将首先包含其所有非空项,然后是它们下面的所有空项,例如,元素是不混合。示例:[非空,非空,....空,空,空]
我的解决方法
我虽然创建了一个 for 循环来检查(从最后一个索引到第一个索引)ArrayList 中的每个元素,以确定它是否为空。如果为空,那么我将调用此代码:
for (i = size-1; i >=0 ; i--) {
groupList = new ArrayList<>(groupList.subList(0, i));
}
我的问题
如果 ArrayList 太大,这种方法可能会特别慢(或者不是?)。我想知道是否存在更好、对性能更友好的解决方案。 AFAIK .subList 方法很昂贵。
【问题讨论】:
-
.subList方法是 O(1)。它不复制;它是超级超级便宜。 -
这显示了一个严重的设计问题。如果您真正想要的是一个不包含空值的可变大小列表,那么制作一个固定大小的列表并在列表中存储空值有什么意义?为什么不至少将第一个空值的索引存储在变量中?
-
@Rainbolt 我主要是在回答 OP 问题的最后一句话,声称“.subList 方法很昂贵。”
标签: java algorithm arraylist time-complexity