[英]More efficient way to remove elements from an array list
我已经开发了这样的数组列表
ArrayList<String> list = new ArrayList<String>();
list.add("1");
list.add("8");
list.add("8");
list.add("3");
list.add("4");
现在我的问题是:如果我想从列表中删除“ 8”,哪种方法更好?
第一种方式:
for(int i = 0; i < list.size(); i++) {
if(list.get(i).equals("8")) {
list.remove(i);
i--;
}
}
第二种方式:
Iterator<String> iterator = list.iterator();
while(iterator.hasNext())
if(iterator.next().equals("8"))
iterator.remove();
现在,请从性能的角度建议其中哪一个更高效,更快,并且还有其他任何类似于内置函数的方式,通过使用它,我们可以删除重复项而无需进行过多迭代。
如果只需要一组数字,则使用HashSet
而不是List
。 如果需要保留数字顺序,请使用LinkedHashSet
。 至于删除,请始终首选带有iterator
的版本,即使在您的特定情况下性能可能是可比的。 带有iterator
的习惯用法比索引更广泛地适用,例如,如果您使用LinkedList
,则索引将导致灾难性的性能。
在性能方面,它们应该相似。 你测试了吗 如果要使用内置方法,则可以达到类似的性能(通过测试确认):
list.removeAll(Arrays.asList("8"));
最后,如果您想要一个没有重复的列表,请使用Set,就像其他人提到的那样。
如果您需要存储重复项,建议您使用Map<Integer,Integer>
,其中第一个Integer是键,第二个是键出现的次数。 因此,当您添加已经存在的密钥时,只需增加相应的计数器即可。 (在删除操作中,反之亦然)。 当需要所有不同的值时,只需使用Map.keySet ()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.