List删除元素
2024-09-07 20:40:25
在单线程环境下的解决办法
public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}
在这个方法中,删除元素实际上调用的就是list.remove()方法,但是它多了一个操作:
expectedModCount = modCount;
因此,在迭代器中如果要删除元素的话,需要调用Itr类的remove方法。
将上述代码改为下面这样就不会报错了:
public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(2);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer integer = iterator.next();
if(integer==2)
iterator.remove(); //注意这个地方
}
}
}
在多线程环境下的解决方法
List<String> myList = new CopyOnWriteArrayList<String>();
myList.add( "1");
myList.add( "2");
myList.add( "3");
myList.add( "4");
myList.add( "5");
new Thread(new Runnable() {
@Override
public void run() {
for (String string : myList) {
System.out.println("遍历集合 value = " + string);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < myList.size(); i++) {
String value = myList.get(i);
System.out.println("删除元素 value = " + value);
if (value.equals( "3")) {
myList.remove(value);
i--; // 注意
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
---------------------
作者:love_world_
来源:CSDN
原文:https://blog.csdn.net/androiddevelop/article/details/21509345
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)
- linux忘记mysql密码找回方法
- Silver Cow Party(最短路,好题)
- 配置EF链接 MySql 的方法
- C和指针笔记 3.7 存储类型
- SVG添加链接(转载)
- android线程间通讯
- SPSS方差分析
- HTTP response codes
- IM 融云 之 安装cocoapods 安装 SDK
- Flash加载ini文件!
- SpringBoot构建RESTful service完成Get和Post
- 一:学习Linux前准备工作
- Redis集群 - Sentinel与RAFT算法
- .net core2 api
- log4j2 的使用
- cmd 运行(打包后的)java程序
- js 操作json对象增删改
- 20145332卢鑫 WEB安全基础实验
- 贪心——HDU-5969 最大的位或