为什么用remove不能移除集合中的元素?

weixin_39836262 2018-01-09 10:19:16
@Test
public void test01() {

// hasNext()
// next()
// remove()

List<String> names = new ArrayList<>();

for (int i=0; i<5; i++) {
names.add("name" + i);
}

Iterator<String> it = names.iterator();

while(it.hasNext()) {
System.out.println(it.next());
}

while(it.hasNext()) {
it.next();
it.remove();
}
System.out.println(names); // [name0, name1, name2, name3, name4]
System.out.println(names.size()); // 5
}
...全文
511 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2018-01-10
  • 打赏
  • 举报
回复
while (it.hasNext()) {
			System.out.println(it.next());
		}
		//while循环遍历结束之后,it.hasNext()已经没有东西了
		it = names.iterator(); //重新给it赋值就可以了
		while (it.hasNext()) {//不重新给it赋值,这个while里面不会执行了
			it.next();
			it.remove();
		}
galiniur0u 2018-01-10
  • 打赏
  • 举报
回复
楼主这种方式会导致无法找到下一个元素而报错,请使用迭代器方式移除。
qq_21912611 2018-01-10
  • 打赏
  • 举报
回复
第一个while已经遍历到最后一个元素,第二个while又判断同一个迭代器是否有下一个,那肯定就没有了,所有第二个while根本就没进循环体
alexander137 2018-01-09
  • 打赏
  • 举报
回复
迭代器是用来遍历集合的,不是用来对集合的元素做操作的

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧