android arrayList迭代过程删除问题

原创 Jacular  2018-08-23 03:09  阅读 86 次

首先看下几个ArrayList循环过程删除元素的方法(一下内容均基于jdk7)

package list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.prefs.Preferences;

public class ListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("a1", "ab2", "a3", "ab4", "a5", "ab6", "a7", "ab8", "a9"));
// 迭代删除方式一
for (String str : list) {
System.out.println(str);
if (str.contains("b")) {
list.remove(str);
}
}
// 迭代删除方式二
int size = list.size();
for (int i = 0; i < size; i++) {
String str = list.get(i);
System.out.println(str);
if (str.contains("b")) {
list.remove(i);
// size--;
// i--;
}
}
// 迭代删除方式三
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(str);
if (str.contains("b")) {
list.remove(i);
}
}
// 迭代删除方式四
for (Iterator<String> ite = list.iterator(); ite.hasNext();) {
String str = ite.next();
System.out.println(str);
if (str.contains("b")) {
ite.remove();
}
}
// 迭代删除方式五
for (Iterator<String> ite = list.iterator(); ite.hasNext();) {
String str = ite.next();
if (str.contains("b")) {
list.remove(str);
}
}

}
}

方式一:报错 java.util.ConcurrentModificationException
方式二:报错:下标越界 java.lang.IndexOutOfBoundsException

    list移除了元素但size大小未响应变化,所以导致数组下标不对;
    list.remove(i)必须size--

    而且取出的数据的索引也不准确,同时需要做i--操作
 方式三:正常删除,不推荐;每次循环都需要计算list的大小,效率低
 方式四:正常删除,推荐使用
 方式五:报错: java.util.ConcurrentModificationException

本文地址:https://www.dandroid.cn/?p=5683
关注我们:请关注一下我们的今日头条号:扫描二维码大安卓源码网的头条号,头条号:大安卓源码
版权声明:本文为原创文章,版权归 Jacular 所有,欢迎分享本文,转载请保留出处!

发表评论


表情