正文之前

今天遇到一个小问题。那就是如何在List中一次删除多个元素?因为我们删除掉一个元素之后,后面的元素的索引都会变化。所以还有另外的搞法,当然,我也有自己的看法

正文

ArrayList类是List接口的实现类,同时List接口是Collection接口的子接口。其删除方法分为带索引号 index 和不带索引两种

1、remove( Object );removeAll( Collection ) //删除指定元素或集合,返回布尔值

2、remove( index );//删除指定索引位置的元素,返回删除的元素

那么显而易见的,当我们在遍历的时候,是不能这么搞得对吧?就算可以!也别这么干,很危险啊,C++里面绝对不容许这么干的。那么Java里边也别这么干吧,所以还是先把要删除的索引用一个ArrayList存起来,(把满足要求的数据放到另一个集合里,)最后统一删除,就不会漏删了!!!!

看我的:

public static void Clear(ArrayList allArea){
ArrayList del = new ArrayList<>();
for (int s = 0;s
if (allArea.get(s).getCount() == 0){
if (s>0) {
allArea.get(s - 1).merge(allArea.get(s));
del.add(allArea.get(s));
}
continue;
}
}
allArea.removeAll(del);
}

这个方法就是专门用来删除在ArrayList allArea中size为0的空的Area的。可以看到,我用一个del存着所有要删除的项目,然后一把删除。。怎么样?不错吧?

不过其实吧,我觉得也可以用索引来删除,不过要从后面开始删起,而且不能是对要删除的ArrayList进行遍历,而是对我们的删除索引集合进行遍历:

public static void Clear(ArrayList allArea){
ArrayList del = new ArrayList<>();
for (int s = 0;s
if (allArea.get(s).getCount() == 0){
if (s>0) {
allArea.get(s - 1).merge(allArea.get(s));
del.add(s);
}
continue;
}
}
for(int i=del.size()-1;i>=0;--i){
allArea.remove(del.get(i));
}
allArea.removeAll(del);
}

下面这法子从均值上来说还慢一点。。。好吧,果然还是官方爸爸厉害啊!!

这就是删除的法子,还蛮好用的!