http://blog.sina.com.cn/s/blog_621b6f0e0100s5n5.html

在java中对list进行操作很频繁,特别是进行list启遍历,这些操作我们都会,也很熟悉,但是对java中list进行删除元素,remove list中的元素就不怎么熟悉了吧,可以说很陌生,是实际操作中也很容易出错,先看看下面这个java中如何remove list 中的元素吧.

  1. public class test {
  2. public static void main(String[] args) {
  3. String str1 = new String("abcde");
  4. String str2 = new String("abcde");
  5. String str3 = new String("abcde");
  6. String str4 = new String("abcde");
  7. String str5 = new String("abcde");
  8. List list = new ArrayList();
  9. list.add(str1);
  10. list.add(str2);
  11. list.add(str3);
  12. list.add(str4);
  13. list.add(str5);
  14. System.out.println("list.size()=" + list.size());
  15. for (int i = 0; i < list.size(); i++) {
  16. if (((String) list.get(i)).startsWith("abcde")) {
  17. list.remove(i);
  18. }
  19. }
  20. System.out.println("after remove:list.size()=" + list.size());
  21. }
  22. }

大家觉得这个程序打印出来的结果是多少呢?

Java代码
  1. 运行结果不是:
  2. list.size()=5
  3. after remove:list.size()=0

而是:

Java代码
  1. list.size()=5
  2. after remove:list.size()=2

这是怎么回事呢?到底要如何remove list 中的元素呢?

原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。

怎么解决?有三种方法可以解决这个问题:

1.倒过来遍历list

Java代码
  1. for (int i = list.size()-1; i > =0; i--) {
  2.   if (((String) list.get(i)).startsWith("abcde")) {
  3.    list.remove(i);
  4.   }
  5. }

2.每移除一个元素以后再把i移回来

Java代码
  1. for (int i = 0; i < list.size(); i++) {
  2.   if (((String) list.get(i)).startsWith("abcde")) {
  3.    list.remove(i);
  4.    i=i-1;
  5.   }
  6. }

3.使用iterator.remove()方法删除

Java代码
    1. for (Iterator it = list.iterator(); it.hasNext();) {
    2.   String str = (String)it.next();
    3.   if (str.equals("chengang")){
    4.    it.remove();
    5.   }
    6. }

最新文章

  1. 简析服务端通过GT导入SHP至PG的方法
  2. 通过.net反射技术实现DataReader转换成Model实体类列表
  3. oracle:sql函数
  4. 【maven】 在 MyEcplise上使用maven搭建Web项目
  5. [LeetCode] Find Median from Data Stream
  6. C/C++程序从编译到链接的过程
  7. 【转】java 自动装箱与拆箱
  8. Grid表格属性
  9. MVC小系列(四)【向RouteData里扔数据】
  10. selenium 运行之后错误提示Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output
  11. Java synchronized 关键字的实现原理
  12. phpcms通过URL传参
  13. IPSP问题
  14. 【django之博客系统开发】
  15. SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
  16. APP研发录笔记
  17. A Boring Question (打表)
  18. mysql 循环、游标
  19. FTP做作业用到的知识点:
  20. php实现备份数据库

热门文章

  1. 动态栅格(DEM)图层实现服务端渲染
  2. Javaweb学习笔记7—JDBC技术
  3. vue利用计算属性做(展开收起)小例子
  4. SQLite概述
  5. echo - 显示一行文本
  6. mount nfs 各版本之间的转换
  7. python_使用qrcode生成二维码
  8. 在Vue中遇到的各种坑 及性能提升
  9. drawer 抽屉 弹框 在 modal的后面的解决方案
  10. STL || HDU 1894 String Compare