List三种遍历方式详解
list集合
list集合常用方法
1、add(int index, Object obj) 在指定的索引增加值
`
List list = new ArrayList();
list.add(0, “abc”);
list.add(0, “xyz”);
list.add(1, “qq”);
2、remove(int index) 根据指定索引删除数据
list.remove(1)
3、set(int index, Object obj) 将指定索引处的元素进行修改
list.set(1,“qq”);
4、get(int index) 获取指定索引处的元素
list.get(1)
list遍历
JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。
普通循环
list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");for (int i = 0; i < list.size(); i++) {Object obj = list.get(i);if (i==0) {list.remove(1);}}System.out.println(list);结果 : [abc, qq, qwer]
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");for (int i = 0; i < list.size(); i++) {String str = list.get(i);if (str.equals("xyz")) {list.remove(i);list.remove(i-1);}}System.out.println(list);
结果:[abc, xyz, qq]
总结:普通循环可以单独用来删除某个指定的元素,不适合用来进行多次的循环删除,因为ArrayList的底层是数组,当删除某个元素时候,索引也会发生相应的变化,比如你删除的是第1个数据,此时第2个数据就变成了第1个,下一次循环的时候实际读取的就是第3个数据
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");for (int i = 0; i < list.size(); i++) {String str = list.get(i);if (str.equals("xyz")) {list.remove(i);}System.out.println(str);}结果:abcxyzxyzqwerxyz
2、增加for循环
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");for(String str : list) { //java.util.ConcurrentModificationException //如果在使用迭代器遍历集合的同时,还用集合对象增删元素,就会出现此异常 ,增强for循环底层是Iteratorif(str.equals("xyz")) {list.remove(str);}}
但是删除完毕马上使用break跳出,则不会触发报错。
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");for(String str : list) { if(str.equals("xyz")) {list.remove(str);break;}}System.out.println(list);}结果 : [abc, abc, xyz, qq, qwer, xyz]
3、iterator遍历
迭代器遍历,迭代器增删
迭代器遍历:获取迭代器Iterator,使用迭代器遍历即可
迭代器删除:可以直接调用迭代器的remove方法
List特有迭代器 ListIterator listIterator()
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");Iterator<String> it = list.listIterator();while(it.hasNext()) {if(it.next().equals("xyz")) {it.remove();}System.out.println(it.next());//报错java.util.NoSuchElementException}System.out.println(list);结果:xyzxyzqwerException in thread "main" java.util.NoSuchElementExceptionat java.util.ArrayList$Itr.next(ArrayList.java:862)at com.wzl.list.Listwzl.main(Listwzl.java:23)
解决:如果已经没有下一个元素,却仍然要获取下一个元素,就会出现该异常,表示没有当前元素的异常,因此尽量不要在判断中判断是否有下一个元素之后,连续获取两个下一个元素
List<String> list = new ArrayList<>();list.add("abc");list.add("xyz");list.add("abc");list.add("xyz");list.add("qq");list.add("qwer");list.add("xyz");Iterator<String> it = list.listIterator();while(it.hasNext()) {String str = it.next();if(str.equals("xyz")) {it.remove();}System.out.println(str);}System.out.println(list);}结果: abc
xyz
abc
xyz
qq
qwer
xyz
[abc, abc, qq, qwer]
List三种遍历方式详解相关推荐
- C++的三种继承方式详解
文章目录 @[toc] C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 ...
- oracle if=,oracle中if/else的三种实现方式详解
1.标准sql规范 1.单个IF IF v=... THEN END IF; 2.IF ... ELSE IF v=... THEN ELSE t....; END IF; 3.多个IF IF v=. ...
- python的等待代码是什么_Python selenium 三种等待方式详解
1.目的背景 解决问题:下拉框定位不到.弹框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待. 原因:代码运行速度快,而浏览器加载渲染速度慢 解决办法:加等待,目 ...
- asp.net Session在web.config中的三种配置方式——详解
这段代码就是设置session在web.config中的存储方式. < sessionState mode="Off|InProc|StateServer|SQLServer" ...
- 飞畅科技-交换机的三种交换方式详解
交换机是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路.交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输,交换机的传 ...
- python三种等待方式_Python selenium 三种等待方式详解
本文摘自:http://blog.csdn.net/huilan_same/article/details/52544521 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很 ...
- 网站分析数据(即用户行为数据)的三种收集方式详解
回顾网站数据分析历史,从"您是第***位来访用户"到现在百家齐放的专业工具提供商,网站分析已经逐渐发展衍化成一门科学.但面对形态各异的分析数据,很多人仍然困惑于数据的来源,了解数据 ...
- c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解
操作系统环境: CentOS 7.4最小化安装 [root@node3 src]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Cor ...
- maven三种打包方式详解
目录 maven常用打包命令 1 方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 2 方法二:使用maven-assembly-plugin插件打 ...
最新文章
- Nature Genetics:微生物基因组如何适应植物?(news views)
- 剑指offer:两个链表的第一个公共结点
- 14岁上中科大、23岁博士毕业的袁岚峰,现在因“简单科普”上热搜,本人回应:科普和科研一样重要...
- MATLAB图像函数以及应用(第六章)边界问题
- SOPC第三课---同时点亮4个LED灯闪烁
- 1108D. Diverse Garland
- 跟小静学MVC3[01]--创建第一个MVC3项目
- 分布式事务与2PC、3PC理论详解
- 两种模式的资源管理器代码之———— 删除文件夹
- 示例项目:简单的六足步行者
- php讲一个数组分割成字符串,PHP 分割字符串函数把字符串分割成数组示例
- 路由器和交换机的原理
- 批量提取网页中的超链接
- php控制wifi上网时长,腾达路由器家长控制功能怎么控制孩子上网时间
- 奈奎斯特采样定理粗略推导
- 【前端技术】一篇文章搞掂:WeX5
- 计算机基础知识文件的复制移动,如何复制文件
- 【计算机网络】-TCP的拥塞控制及拥塞控制方法
- MongoDB最新最佳连接工具:Robo 3T
- IDEA+MySQL+JavaFX之通讯录系统