ArrayList中remove()方法删除元素之后下标重定位的问题
需求:
有一个ArrayList数组,要求删除长度大于5的字符串,如:arr = {"ab1","123ad","bca","dadfadf","dddaaa","你好啊","我来啦","别跑啊"};
输出结果:
{"ab1","123ad","bca","你好啊","我来啦","别跑啊"}
问题:如何能够在下一次遍历时,弥补删除元素之后自动跳到下一个元素的漏洞。问题代码与图解如下:
for (int j = 0; j < arr.size(); j++) {String str = (String) arr.get(j);if (str.length() > 5) {arr.remove(str);}
}
报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
解决方案
方案1:倒序操作:
for (int j = arr.size(); j > 0; j--) {String str = (String) arr.get(j);if (str.length() > 5) {arr.remove(str);}
}
方案2:使用迭代器,利用迭代器的remove方法删除元素,优点是不用考虑数组的长度
Iterator it = arr.iterator();
while (it.hasNext()) {String str = (String) it.next();if (str.length() > 5) { // 判断字符串的长度是否大于5it.remove(); // 使用迭代器的remove方法} else {System.out.println(str);}
}
方案3:使用迭代器,利用迭代器Iterator的子类listIterator的remove方法删除元素
ListIterator it = (ListIterator) arr.listIterator();
while (it.hasNext()) {String str = (String) it.next();if (str.length() > 5) {it.remove();}
}
ArrayList中remove()方法删除元素之后下标重定位的问题相关推荐
- Jquery使用Remove方法删除元素节点
使用Jquery的方法remove()删除节点时,每删除一个节点,其索引会变化, 可以在删除索引后,改变循环的值 使用jQuery的remove方法直接删除节点 直接连续删除两个tr节点,会发现第二个 ...
- List集合中remove方法的使用
以ArrayList为例: //泛型为引用数据类型: ArrayList<String> list=new ArrayList<String>();list.add(" ...
- jquery中remove()方法移除被选元素,包括所有的文本和子节点
jquery中remove方法移除被选元素,包括所有的文本和子节点 定义和用法 移除所有的 元素 移除html中指定id的元素内容 定义和用法 remove() 方法移除被选元素,包括所有的文本和子节 ...
- java中map删除指定元素_Map中根据条件删除元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processM ...
- List中remove()方法的陷阱,被坑惨了!
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/pelifymeng2/ article/details/78085836 Java的List在删 ...
- 【142期】List 中 remove() 方法的“陷阱”,被坑惨了!
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... Jav ...
- List中remove()方法的陷阱以及终极的解决方法!
Java的List在删除元素时,一般会用list.remove(o)方法.在使用时,可能会抛出java.util.ConcurrentModificationException的异常.总结以往经验,记 ...
- java中List遍历删除元素
删除末尾几个元素 import java.util.LinkedList; import java.util.List;public class TestList {public static voi ...
- java中List遍历删除元素,Android进阶之光
一.结缘 实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过 ...
最新文章
- 测试start backup和ndb_restore
- mysql originator_MySQL中的事件调度器EVENT
- 深入理解Java的整型类型:如何实现2+2=5?
- easy mysql_GitHub - aleafs/easymysql: mysql client in cluster, based on node-mysql
- Moment.js日期处理库的使用
- android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称
- 计算机网络 socket,[计算机网络]简单聊聊套接字 Socket
- MyCat分布式数据库集群架构工作笔记0013---高可用_Mycat双主双从复制配置上
- PHP用socket连接SMTP服务器发送邮件
- 难得清醒好文:年轻人你活着不是为了看K线——李小鹏
- 论文阅读笔记:内卷involution《Involution: Inverting the Inherence of Convolution for Visual Recognition》
- 通过自定义函数计算阶乘
- web前端开发做项目,CSS盒子模型居中方法
- 【博客5】缤果LabView串口调试助手V2.0 (高级篇)
- 阿里云OSS上传报错:InvalidAccessKeyIdError
- 2018医学考博英语阅读理解解题技巧
- 神经机器翻译(Neural machine translation, NMT)学习笔记
- 使用PE工具制作U盘启动盘
- Spring Boot框架入门到进阶教程(自学版)
- 认知世界(1)--学与思
热门文章
- python opencv —— 背景提取(MOG、KNN)、识别与检测(Haar Cascade)
- Python Flask Web 第七课 —— 使用 flask-moment 本地化日期和时间
- Linux 动态链接和静态链接简析(库名与库文件名)
- 生活中的数学(为生活建模)
- springboot controller调用service_秀!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!...
- python课程价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少
- python从入门到放弃百度云-Python从入门到放弃——第一课
- 如何自学python知乎-初次接触python,怎么样系统的自学呢?
- Kaldi(A1)语音识别原理
- 微信小程序和百度的语音识别接口详解