`
thrillerzw
  • 浏览: 139268 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ArrayList 删除元素问题总结

    博客分类:
  • java
 
阅读更多
	/**
	 * List每remove掉一个元素,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
	 * 
	 * @author zw
	 * @date  2013-4-15
	 * @return void
	 */
	@Test
	public void testRemove(){
		List<String> al = new ArrayList<String>(5);
		al.add("not1");
		al.add("not2");
		al.add("not3");
		al.add("not4");
		al.add("not5");
		List<String> al2 = new ArrayList<String>();
		List<String> al3 = new ArrayList<String>();
		List<String> al4 = new ArrayList<String>();
		al2.addAll(al);
		al3.addAll(al);
		al4.addAll(al);
		
		 //错误,不能全部remove
		System.out.println("begin al size: "+al.size());
		for(int i=0;i<al.size();i++){   
			String str=al.get(i);
			if(str.indexOf("not")!=-1){
				al.remove(i);
			}
		}
		
		System.out.println("end al size: "+al.size());
		Assert.assertFalse(0==al.size());
		
		//方法1:正确,可以全部remove
	
		System.out.println("begin al2 size: "+al2.size());
		Iterator<String> iterator=al2.iterator();
		while(iterator.hasNext()){
			String str=iterator.next();
			if(str.indexOf("not")!=-1){
				iterator.remove();
			}
		}
		System.out.println("end al2 size: "+al2.size());
		Assert.assertEquals(0, al2.size());
		
		//方法2:倒过来遍历,ok
		System.out.println("begin al3 size: "+al3.size());
		for(int i=al3.size()-1;i>=0;i--){   
			String str=al3.get(i);
			if(str.indexOf("not")!=-1){
				al3.remove(i);
			}
		}
		
		System.out.println("end al3 size: "+al3.size());
		Assert.assertEquals(0, al3.size());
		
		//方法3:每移除一个元素以后再把i移回来
		System.out.println("begin al4 size: "+al4.size());
		for(int i=0;i<al4.size();i++){   
			String str=al4.get(i);
			if(str.indexOf("not")!=-1){
				al4.remove(i);
				i=i-1;
			}
		}
		
		System.out.println("end al4 size: "+al4.size());
		Assert.assertEquals(0, al4.size());
		
	}

 

分享到:
评论

相关推荐

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    这篇集合总结一共包括十二节,介绍了一些接口和实现类的底层源码以及基本的增加、删除元素等的操作(包括List、Map、Set接口、ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类)。...

    基于javatcpsocket通信的拆包和装包源码-all-in-one:知识点总结

    List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问,查找元素效率高,插入删除效率低。 Set集合是无序集合,集合中的元素不可以重复,检索效率低下,删除和插入效率高,访问集合...

    大数据面试题.pdf

    ⽼掉⽛的问题了,还在这⾥⽼⽣常谈:List特点:元素有放⼊顺序,元素可重复 ,Set特点:元素⽆放⼊顺序,元素不可重复。 1-2)数据库的三⼤范式? 原⼦性、⼀致性、唯⼀性 1-3)java 的io类的图解 1-4)对象与引⽤...

    Linq基础学习资料,通俗易懂

    6.2.15 Except 从某集合中删除其与另一个集合中相同的项 20 6.2.16 Reverse 反转集合 20 6.2.17 TakeWhile 条件第一次不成立就跳出循环 20 6.2.18 SkipWhile 条件第一次不成立就失效,将后面的数据全取 20 6.2....

    java 面试题 总结

    栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 19、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL...

    积分兑换系统java源码-leetcode:每天坚持两道题,整理数据结构与算法相关代码

    积分兑换系统 java源码 记录和总结数据结构与算法相关内容 ###主要实践为leetcode,剑...数组按照下标访问时,其时间复杂度是O(1),插入元素的时间复杂度是O(n),链表适合插入和删除数据,时间复杂度为O(1)。 数组的基本

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最...

    ASP.NET2.0高级编程(第4版)1/6

    删除条目131 5.11 ListBox服务器控件132  5.11.1 允许用户选择多项133  5.11.2 使用ListBox控件的例子133  5.11.3 给集合添加条目136 5.12 CheckBox服务器控件136  5.12.1 确定复选框是否被选中138  5.12.2 给...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    10.8 集合和列表总结 303 10.9 小结 306 第11章 ASP.NET 2.0中的数据绑定 307 11.1 数据源控件 307 11.1.1 SqlDataSource控件 310 11.1.2 XmlDataSource控件 316 11.1.3 ObjectDataSource控件 316 11.1.4 ...

    springmybatis

    后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的数组 109 5.2.3 一“实”多“名”带来的困惑 111 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的数组 109 5.2.3 一“实”多“名”带来的困惑 111 ...

    二十三种设计模式【PDF版】

    于你能容易地添加/删除属性”等。一旦懂得了模式,许多设计决策自然而然就产生了。 我们都知道设计经验的重要价值。你曾经多少次有过这种感觉—你已经解决过了一个问题但就是不能确切知道是在什么地 方或怎么解决的...

    C# for CSDN 乱七八糟的看不懂

    使用集合时,必须注意集合的生命期问题。如果有两个集合 L1 和 L2,使用 了 L1=L2; 后,只要 L2 生命期没有终结,它的以后的变化就可能会影响到 L1 的数值。因 此在赋值后应该及时销毁或者初始化 L2,以免发生不可...

    Java面试宝典2010版

    13.删除除了id号不同,其他都相同的学生冗余信息 104 14.航空网的几个航班查询题: 104 15.查出比经理薪水还高的员工信息: 105 16、求出小于45岁的各个老师所带的大于12岁的学生人数 106 17.求出发帖最多的人: 107 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    4.2.4 操作符的优先级和结合性总结 68 4.3 使用if语句来做出决策 68 4.3.1 理解if语句的语法 69 4.3.2 使用代码块来对语句进行分组 70 4.3.3 嵌套if语句 70 4.4 使用switch语句 75 4.4.1 理解switch语句的语法...

    asp.net技术内幕(1)

    3.4.2 比较一个控件的值与固定值 3.4.3 执行数据类型检查 3.5 检查值的范围:RangeValidator控件 3.6 错误汇总:ValidationSummary控件 3.7 执行自定义的检验:CustomValidator控件 3.8 ...

    asp.net技术内幕(2)

    3.4.2 比较一个控件的值与固定值 3.4.3 执行数据类型检查 3.5 检查值的范围:RangeValidator控件 3.6 错误汇总:ValidationSummary控件 3.7 执行自定义的检验:CustomValidator控件 3.8 ...

    asp.net技术内幕(5)

    3.4.2 比较一个控件的值与固定值 3.4.3 执行数据类型检查 3.5 检查值的范围:RangeValidator控件 3.6 错误汇总:ValidationSummary控件 3.7 执行自定义的检验:CustomValidator控件 3.8 ...

    asp.net技术内幕(4)

    3.4.2 比较一个控件的值与固定值 3.4.3 执行数据类型检查 3.5 检查值的范围:RangeValidator控件 3.6 错误汇总:ValidationSummary控件 3.7 执行自定义的检验:CustomValidator控件 3.8 ...

Global site tag (gtag.js) - Google Analytics