Java--List 过滤引发的小错误
来源:互联网 发布:网络学校国家承认吗 编辑:程序博客网 时间:2024/06/07 10:10
本来是要写一个对list里的对象过滤的简单的方法,写完之后发现总是不对啊。。。后来想了想,犯了个小错。
这里写下来提醒自己以后。。。。。
package com.lzz.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* * 这是编码中出现的一个错误,记录反思下 * 把一个list对象集合过滤后仍返回 * @author lzz */ public class ListFilter { //过滤掉年龄是12到18的小孩 public static void main(String[] args) { List list=new ArrayList(); list.add(new UserVo("Apple", 13)); list.add(new UserVo("Orange", 16)); list.add(new UserVo("Banana",20)); List nlist=filterList(list); Iterator it=nlist.iterator(); System.out.println("过滤后的结果"); while(it.hasNext()){ System.out.println(((UserVo)it.next()).getUsername()); } } public static List filterList(List list){ for(int i=0;i<list.size();i++){ System.out.println("第 "+i+"次循环"); for(int j=0;j<list.size();j++){ System.out.println(((UserVo)list.get(j)).getUsername()+" "+list.indexOf(list.get(j))); } int age=((UserVo)list.get(i)).getAge(); if(age>12&&age<18){ System.out.println("删除的是:"+((UserVo)list.get(i)).getUsername()); list.remove(i); //图省事搞了个大麻烦 } } return list; } } /** * 要进行过滤的类 * @author lzz */ class UserVo{ private String username; private int age; public UserVo(){ } public UserVo(String username,int age){ this.username=username; this.age=age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
--------------------------------------
- 第 0次循环
- Apple 0
- Orange 1
- Banana 2
- 删除的是:Apple
- 第 1次循环
- Orange 0
- Banana 1
- 过滤后的结果
- Orange
- Banana
这里很容易看出来,本来以为把过滤掉的对象删除就好了,结果省事造成了麻烦。
当Apple对象过滤之后,对象的长度变了,原来index为2的Banana变成了1,下次循环的
时候orange就被忽视掉了。。。所以最后的结果当然是错误的。Orange根本就没有判断呢。
解决方法1 new一个list接收没有被删除的对象,然后返回就好了
2 用数组记录下要被删除对象的index,最后一并删除完返回就好了。
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309341
0 0
- Java--List 过滤引发的小错误
- 由java.lang.NoClassDefFoundError: List错误引发的jdk配置
- 小错误引发大问题 clr_bit的使用
- 由contenttype引发的一次小错误
- 传智播客学习之小错误引发的大道理
- 实习心得(四) 小错误引发的大问题
- 小实验、小思考(一)------List添加对象引发的小思考
- / 引发的错误
- snprintf引发的错误
- =引发的错误
- arc 引发的错误
- 在java的中由Date引发的错误
- 由replaceAll引发的java.util.regex.PatternSyntaxException错误
- 一个Java内部类引发的FindNoClass错误
- 由replaceAll引发的java.util.regex.PatternSyntaxException错误
- 由请求资源路径错误和火狐浏览器的网络请求显示自动过滤引发的debug血案
- setInterval引发的小问题
- 变量溢出引发的错误
- Java动态编译类小案例
- Red Hat Enterprise Linux 6.1 下载地址
- Linux下firefox浏览器代理和编码的设置
- VBOX下安装RHEL5.4增强工具失败的解决办法
- Redhat5.4下安装cmake
- Java--List 过滤引发的小错误
- Java-POI读取Excel简单案例
- Spring学习笔记--- BeanFactory简单模拟
- Oracle 9i/10g 下载地址整理总汇
- VBA--word模板标签替换操作
- Java--switch使用易错点小结
- Java--使用Base64编码对url传值
- Oracle--始终无法远程登录,配置没问题
- [Tomcat]安装并启动tomcat6