ArrayList中remove()方法删除长度大于5的元素之后下标重定位的问题

1、问题阐述



需求

有一个ArrayList数组,要求删除长度大于5的字符串,如:arr = {"ab1","123ad","bca","dadfadf","dddaaa","你好啊","我来啦","别跑啊"};

要求结果输出

{"ab1","123ad","bca","你好啊","我来啦","别跑啊"}

难点

  删除元素可以用remove()方法,先循环遍历元素,如果发现该元素的长度大于5就删除该元素,但是问题来了,假设此时删除的元素下标为3,后面的元素会自动往前移动一位,填补被删除了的元素,下一次循环遍历下标就变成了4,直接跳过了之前填补的位置,但刚刚的位置的元素已经变了,此时这个元素已经遍历不到了。

  中心难点是如何能够再一次遍历刚刚位置上的元素,弥补删除元素之后自动跳到下一个元素的漏洞。图解如下:

 

2、解决方案


3、经验总结



ArrayList中remove()方法删除长度大于5的元素之后下标重定位的问题

时间: 2024-08-09 03:12:29

ArrayList中remove()方法删除长度大于5的元素之后下标重定位的问题的相关文章

ArrayList调用remove方法需要注意的地方

ArrayList中有remove 方法和 removeAll方法, ArrayList中不仅继承了接口Collection中的remove方法,而且还扩展了remove方法. Collection中声明的接口为 public boolean remove(Object o) public boolean removeAll(Collection<?> c) ArrayList中含有的方法为public E remove(int index) 实际编程中可能会通过一个Collection来调用

Android ListView的适配器 Adapter 中GetView方法调用次数大于数据条数的问题

情况描述: 今天在写数据展示的时候,用了ListView,在它的适配器当中,发现getview方法执行的次数是数据条目的N倍(我这边显示的是4倍,这个倍数值不知道会不会变化),这显然是不科学的! 查阅资料,发现是ListView的布局问题.我把 android:layout_height="wrap_content"高度设置成了wrap_content.而wrap_content值使得ListView没有取到实际的高度,他还要根据计算才能确定,而每一次计算应该会触发listview的渲

List的remove方法里的坑

今天遇到一件怪事,用一个ArrayList添加了一个对象,再调用ArrayList的remove方法删除该对象,当然这时对象是数据库里查出来的,但内容绝对是一样,却发现remove失败了.演示一下,这里用了自定义的Merchant对象,测试时只需随便自定义一个对象即可: public static void main(String[] args) { List<Merchant> merchants = new ArrayList<>(); Merchant merchant =

collection中的remove方法

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTest03 { /** boolean remove(Object o); remove和contains方法都需要集合中的元素重写equals方法. 因为Object中的equals方法比较内存地址,在现实的业务逻辑当中 不能比较内存地址,该比较内容. */ public stat

12.使用remove()和empty()方法删除元素

remove()方法删除所选元素本身和子元素,该方法可以通过添加过滤参数指定需要删除的某些元素,而empty()方法则只删除所选元素的子元素. 例如,调用remove()方法删除<span>元素中类别名为“red”的,如下图所示: 在浏览器中显示的效果: 从图中可以看出,使用remove(".red")方法只是把<span>元素中类别名为“red”的这部分元素给删除了.

Java ArrayList在foreach中remove的问题分析

目录 iterator itr.hasNext 和 itr.next 实现 倒数第二个元素的特殊 如何避坑 都说ArrayList在用foreach循环的时候,不能add元素,也不能remove元素,可能会抛异常,那我们就来分析一下它具体的实现.我目前的环境是Java8. 有下面一段代码: public class TestForEachList extends BaseTests { @Test public void testForeach() { List<String> list =

javascript中数组方法小计

一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); // 1,2,3; console.log(arr.join("_")); // 1_2_3; console.log(arr); // [1,2,3]; 原数组不变. 2:reverse(); 将数组逆序排列,原数组被修改. var arr=[1,2,3]; var arr2=arr.

ArrayList中Iterator的研究学习

最近去某公司面试,被问到了一个简单的问题,ArrayList中要删除一些元素应该怎么操作?答曰:"使用Iterator迭代器遍历,判断之后再用迭代器提供的remove()方法将判断为true的元素删掉",问:“为什么要选择这个方法?”答曰:“迭代器采用的是fail-fast机制,foreach循环内部调用了迭代器,删除元素破坏了集合的结构,所以会报错”,追问:“为什么不能用for循环呢?没使用迭代器也应该可行啊?为什么迭代器又是可以的呢?” 答曰:“因为for循环删掉元素后会错位,至于

Java连载85-集合的Contains和Remove方法

一.包含与删除两种方法解析 1.boolean contains(Object o);判断集合中是否包含某个元素. package com.bjpowernode.java_learning; import java.util.*; ? public class D85_1_ContainsMethod { public static void main(String[] args) { //创建集合 Collection c = new ArrayList(); //创建两个Integer类型