需求:

有一个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()方法删除元素之后下标重定位的问题相关推荐

  1. Jquery使用Remove方法删除元素节点

    使用Jquery的方法remove()删除节点时,每删除一个节点,其索引会变化, 可以在删除索引后,改变循环的值 使用jQuery的remove方法直接删除节点 直接连续删除两个tr节点,会发现第二个 ...

  2. List集合中remove方法的使用

    以ArrayList为例: //泛型为引用数据类型: ArrayList<String> list=new ArrayList<String>();list.add(" ...

  3. jquery中remove()方法移除被选元素,包括所有的文本和子节点

    jquery中remove方法移除被选元素,包括所有的文本和子节点 定义和用法 移除所有的 元素 移除html中指定id的元素内容 定义和用法 remove() 方法移除被选元素,包括所有的文本和子节 ...

  4. java中map删除指定元素_Map中根据条件删除元素

    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processM ...

  5. List中remove()方法的陷阱,被坑惨了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/pelifymeng2/ article/details/78085836 Java的List在删 ...

  6. 【142期】List 中 remove() 方法的“陷阱”,被坑惨了!

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... Jav ...

  7. List中remove()方法的陷阱以及终极的解决方法!

    Java的List在删除元素时,一般会用list.remove(o)方法.在使用时,可能会抛出java.util.ConcurrentModificationException的异常.总结以往经验,记 ...

  8. java中List遍历删除元素

    删除末尾几个元素 import java.util.LinkedList; import java.util.List;public class TestList {public static voi ...

  9. java中List遍历删除元素,Android进阶之光

    一.结缘 实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过 ...

最新文章

  1. 测试start backup和ndb_restore
  2. mysql originator_MySQL中的事件调度器EVENT
  3. 深入理解Java的整型类型:如何实现2+2=5?
  4. easy mysql_GitHub - aleafs/easymysql: mysql client in cluster, based on node-mysql
  5. Moment.js日期处理库的使用
  6. android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称
  7. 计算机网络 socket,[计算机网络]简单聊聊套接字 Socket
  8. MyCat分布式数据库集群架构工作笔记0013---高可用_Mycat双主双从复制配置上
  9. PHP用socket连接SMTP服务器发送邮件
  10. 难得清醒好文:年轻人你活着不是为了看K线——李小鹏
  11. 论文阅读笔记:内卷involution《Involution: Inverting the Inherence of Convolution for Visual Recognition》
  12. 通过自定义函数计算阶乘
  13. web前端开发做项目,CSS盒子模型居中方法
  14. 【博客5】缤果LabView串口调试助手V2.0 (高级篇)
  15. 阿里云OSS上传报错:InvalidAccessKeyIdError
  16. 2018医学考博英语阅读理解解题技巧
  17. 神经机器翻译(Neural machine translation, NMT)学习笔记
  18. 使用PE工具制作U盘启动盘
  19. Spring Boot框架入门到进阶教程(自学版)
  20. 认知世界(1)--学与思

热门文章

  1. python opencv —— 背景提取(MOG、KNN)、识别与检测(Haar Cascade)
  2. Python Flask Web 第七课 —— 使用 flask-moment 本地化日期和时间
  3. Linux 动态链接和静态链接简析(库名与库文件名)
  4. 生活中的数学(为生活建模)
  5. springboot controller调用service_秀!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!...
  6. python课程价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少
  7. python从入门到放弃百度云-Python从入门到放弃——第一课
  8. 如何自学python知乎-初次接触python,怎么样系统的自学呢?
  9. Kaldi(A1)语音识别原理
  10. 微信小程序和百度的语音识别接口详解