我的Java路上那些事儿
快乐成长
posts - 110, comments - 101, trackbacks - 0, articles - 7
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
list 循环时 remove方法 异常 与 处理 方式
Posted on 2012-11-01 18:09
云云
阅读(3835)
评论(1)
编辑
收藏
/** */
/**
*
*/
package
com.test;
import
java.util.ArrayList;
import
java.util.Iterator;
import
java.util.List;
import
java.util.concurrent.CopyOnWriteArrayList;
/** */
/**
*
@author
hello_yun
*
*/
public
class
ListOperation
{
/** */
/**
*
@param
args
*/
public
static
void
main(String[] args)
{
List
<
Integer
>
list1
=
new
ArrayList
<
Integer
>
();
List
<
Integer
>
list2
=
new
CopyOnWriteArrayList
<
Integer
>
();
list1.add(
1
);
list1.add(
2
);
list1.add(
3
);
list2.add(
3
);
list2.add(
4
);
//
try
//
{
//
for(Integer in : list1){
//
list1.remove(in);
//
直接循环 删除对象会抛异常
//
}
//
} catch (Exception e)
//
{
//
System.out.println("list1 size : "+list1.size());
//
System.out.println("循环list1 异常 : "+e);
//
}
for
(Integer in : list2)
{
list2.remove(in);
System.out.println(
"
list2 :
"
+
list2.size());
}
list1.add(
1
);
list1.add(
2
);
list2.add(
3
);
list2.add(
4
);
for
(Iterator iterator
=
list1.iterator(); iterator.hasNext();)
{
iterator.next();
iterator.remove();
}
try
{
for
(Iterator iterator
=
list2.iterator(); iterator.hasNext();)
{
iterator.next();
iterator.remove();
}
}
catch
(Exception e)
{
System.out.println(
"
copyOnWriteArrayList remove :
"
+
e);
}
//
-------------这种方式 不会抛异常 -------------------------
try
{
for
(
int
i
=
0
;i
<
list1.size();i
++
)
{
list1.remove(i);
}
}
catch
(Exception e)
{
System.out.println(
"
list1 size :
"
+
list1.size());
System.out.println(
"
循环list1 异常 :
"
+
e);
}
}
}
使用 copyOnWriteArrayList时 ,通过 list.remove()方法是安全的 但是使用iterator.remove是会抛异常的
查看copyOnWriteArrayList源码 会发现 iterator.remove方法的实现是直接抛异常的
/**
* Not supported. Always throws UnsupportedOperationException.
* @throws UnsupportedOperationException always; <tt>remove</tt>
* is not supported by this iterator.
*/
public void remove() {
throw new UnsupportedOperationException();
}
但是通过ArrayList实现时, list.remove会抛异常 java.util.ConcurrentModificationException,
但是 ArrayList的 iterator.remove不会抛异常
评论
#
re: list 循环时 remove方法 异常 与 处理 方式 [未登录]
回复
更多评论
2015-12-09 11:05 by
Young
使用for(int i=0;i<list1.size();i++)这种形式去remove元素,虽然不会抛异常,但是未能正确的remove元素,最后的list1的size不等于0
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 云云
日历
<
2012年11月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔档案
2015年7月 (1)
2014年9月 (3)
2014年1月 (3)
2013年12月 (1)
2013年11月 (4)
2013年10月 (2)
2013年7月 (2)
2013年6月 (3)
2013年4月 (2)
2013年1月 (2)
2012年12月 (4)
2012年11月 (3)
2012年10月 (3)
2012年9月 (2)
2012年8月 (1)
2012年7月 (9)
2012年6月 (2)
2012年5月 (6)
2012年4月 (7)
2012年3月 (2)
2012年2月 (1)
2012年1月 (1)
2011年12月 (2)
2011年11月 (16)
2011年10月 (7)
2011年8月 (1)
2011年6月 (2)
2011年5月 (5)
2011年4月 (9)
2011年3月 (10)
搜索
最新评论
1. re: CAP原理与最终一致性 强一致性 透析
学习。
--NewSea
2. re: 一致性哈希算法与Java实现
有一个问题,如果使用虚拟节点,某台机器每次宕机再恢复后都需要迁移数据。这样是否反而更麻烦了。
--三单联咖啡色
3. re: java static块和static 方法 的使用区别
sss
--zhangsan
4. re: struts2 jsp页面使用s:if 标签
你是基佬 哦耶耶
--基佬
5. re: android开发过程中 R文件消失 clean 和 build project都无效 已解决
评论内容较长,点击标题查看
--llll
阅读排行榜
1. linux 新建用户、用户组 以及为新用户分配权限(127863)
2. Oracle内连接、外连接、右外连接、全外连接小总结(93188)
3. zookeeper 集群安装(单点与分布式成功安装)摘录(79138)
4. android开发过程中 R文件消失 clean 和 build project都无效 已解决(76951)
5. 一致性哈希算法与Java实现 (48827)
评论排行榜
1. Oracle内连接、外连接、右外连接、全外连接小总结(12)
2. zookeeper 集群安装(单点与分布式成功安装)摘录(11)
3. android开发过程中 R文件消失 clean 和 build project都无效 已解决(6)
4. struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input(6)
5. jquery 自动过滤表单输入框前后空格(5)