你会如何“压缩”一个列表?

时间:2014-01-08 19:27:58

标签: java performance list

例如说我有一个包含以下值的列表

{"A", null, null, "B", null, "C", null, "D", "E", null}

将其压缩到

的最有效方法是什么
{"A", "B", "C", "D", "E"}

有没有办法快速高效地完成这项工作,而无需完全创建新列表。如果压缩列表看起来像

,那也没关系
{"A", "B", "C", "D", "E", null, null, null, null, null}

5 个答案:

答案 0 :(得分:11)

就代码效率而言,我所知道的最有效率是

list.removeAll( Collections.singleton(null) );

答案 1 :(得分:1)

可以使用此简单循环删除所有null元素

while(aList.remove(null)) {/*do nothing */};

答案 2 :(得分:0)

如果它真的是一个Java List(而不是一个数组),它会在你删除一个元素时自动重新链接List中的元素。

所以在{A,B,C,D}

如果我调用list.remove(C),列表现在应该看起来像{A,B,D}

答案 3 :(得分:0)

如果你想保留相同的列表,你可以这样做。

int end = 0;
for(int i = 0; i < list.size(); i++) {
    Object o = list.get(i);
    if (o != null)
        list.set(end++, o);
}
// remove the trailing values.
list.sublist(end, list.size()).clear();

答案 4 :(得分:0)

这也应该有效:

list.removeAll(Arrays.asList(null));