关于List.remove在for循环中出现问题的解决方案
来源:互联网 发布:spss分析数据的步骤 编辑:程序博客网 时间:2024/06/06 16:55
在Java中对list进行操作很频繁,特别是进行list启遍历,这些操作我们都会,也很熟悉,但是对java中list进行删除元素,remove list中的元素就不怎么熟悉了吧,可以说很陌生,是实际操作中也很容易出错,先看看下面这个java中如何remove list 中的元素吧.
- public class test {
- public static void main(String[] args) {
- String str1 = new String("abcde");
- String str2 = new String("abcde");
- String str3 = new String("abcde");
- String str4 = new String("abcde");
- String str5 = new String("abcde");
- List list = new ArrayList();
- list.add(str1);
- list.add(str2);
- list.add(str3);
- list.add(str4);
- list.add(str5);
- System.out.println("list.size()=" + list.size());
- for (int i = 0; i < list.size(); i++) {
- if (((String) list.get(i)).startsWith("abcde")) {
- list.remove(i);
- }
- }
- System.out.println("after remove:list.size()=" + list.size());
- }
- }
大家觉得这个程序打印出来的结果是多少呢?
Java代码
- 运行结果不是:
- list.size()=5
- after remove:list.size()=0
而是:
Java代码
- list.size()=5
- after remove:list.size()=2
这是怎么回事呢?到底要如何remove list 中的元素呢?
原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
怎么解决?有三种方法可以解决这个问题:
1.倒过来遍历list
Java代码
- for (int i = list.size()-1; i > =0; i--) {
- if (((String) list.get(i)).startsWith("abcde")) {
- list.remove(i);
- }
- }
2.每移除一个元素以后再把i移回来
Java代码
- for (int i = 0; i < list.size(); i++) {
- if (((String) list.get(i)).startsWith("abcde")) {
- list.remove(i);
- i=i-1;
- }
- }
Java代码
if (null != list && list.size() > 0) {
Iterator it = list.iterator();
while(it.hasNext()){
Student stu = (Student)it.next();
if (stu.getStudentId() == studentId) {
it.remove(); //移除该对象
}
}
}
Iterator it = list.iterator();
while(it.hasNext()){
Student stu = (Student)it.next();
if (stu.getStudentId() == studentId) {
it.remove(); //移除该对象
}
}
}
阅读全文
0 0
- 关于List.remove在for循环中出现问题的解决方案
- 关于List.remove在for循环中出现问题的解决方案
- 关于List.remove在for循环中出现问题的解决方案
- 关于在list的值在循环中remove时出现的错误的总结
- 在for循环中remove list报错越界的问题
- python:在for遍历list时使用remove出现的问题以及解析
- List 循环中出现的问题
- 关于在DELPHI中FOR循环语句的使用问题
- 关于java for()循环 remove 的使用
- 关于java for()循环 remove 的使用
- 关于C++中for循环的问题
- 循环中使用List.remove的坑
- 关于JAVA中使用remove方法循环删除list中元素的常见误区
- 关于在Log4j中使用JDBCAppender时出现死循环的问题
- 关于在Log4j中使用JDBCAppender时出现死循环的问题
- 关于在C中如何跳出for循环的一个问题
- java中在for循环中remove元素时的陷阱
- 关于Struts2在web.xml中配置后出现404错误的问题,完美解决方案!
- Mongodb 与sql 语句对照
- 双重hash
- mqsql表中DATETIME类型值的比较
- 操作系统常见面试题总结----
- linux下使用yum安装redis并启动服务
- 关于List.remove在for循环中出现问题的解决方案
- hihoCoder 1062 最近公共祖先·一(两种实现)
- 《广义动量定理与系统思考——战争、…
- 广义动量定理与系统思考——战争、管…
- Datagridview中手动绑定列之后界面显示不一
- 目录
- MySql 5.7 UPDATE 和 DELETE 导致的 error code [1093]
- 《广义动量定理与系统思考----战争…
- errorstack 工具使用介绍