Java 将ArrayList从索引i删除到i+;3.

Java 将ArrayList从索引i删除到i+;3.,java,arraylist,Java,Arraylist,抱歉,如果这个问题太简单或者以前有人问过,我是编程新手,我有一个名为ar的ArrayList,声明为ArrayListar=new ArrayList() 我有以下代码: String delnr = ""; delnr = cin.nextLine(); if(ar.contains(delnr)) { for (int i = 0; i < ar.size(); i++) { if(ar.get(i).equals(delnr)) {

抱歉,如果这个问题太简单或者以前有人问过,我是编程新手,我有一个名为
ar
的ArrayList,声明为ArrayList
ar=new ArrayList()

我有以下代码:

String delnr = "";
delnr = cin.nextLine();

if(ar.contains(delnr))
{
    for (int i = 0; i < ar.size(); i++)
    {
        if(ar.get(i).equals(delnr))
        {
            ar.remove(i);

            //Here I want to remove i+1 i+2 and i+3 as well.
        }
    }
}

您不能使用
removeRange
。就这样做吧。这是因为
子列表
是原始列表的不可变视图。因此,更改
子列表
会更改原始列表

List<Integer> list = new ArrayList<>(List.of(1,2,3,10,20,30,40,4,5,6,7));
System.out.println(list);
list.removeAll(list.subList(3,7));
System.out.println(list);
在你的情况下,可能是这样的

List<Integer> list = 
    new ArrayList<>(List.of(1, 2, 3, 10, 20, 30, 40, 4, 5, 6, 7));
for (int i = 0; i < list.size(); i++) {
    if (list.get(i) == 10) {
        list.removeAll(list.subList(i, i + 4));
    }
}
System.out.println(list);
列表=
新的ArrayList(列表(1,2,3,10,20,30,40,4,5,6,7));
对于(int i=0;i
当您使用索引删除元素时,需要了解的最重要的一点是,
列表每次都会缩小,也就是说,您只需再次调用remove来删除下一个元素,因为下一个元素已经取代了上一个删除的元素

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(Arrays.asList("c", "b", "a", "d", "e", "j", "k"));
        System.out.println("Original list: ");
        System.out.println(list);

        // Let's say we are searching `a`
        int index = list.indexOf("a");
        if (index != -1 && ((index + 3) < list.size())) {
            // Remove element at index, index + 1, index + 2 and index +3
            list.remove(index);
            list.remove(index);
            list.remove(index);
            list.remove(index);
        }

        System.out.println("Updated list: ");
        System.out.println(list);
    }
}
通过将重复的代码放入循环中,可以简化上面给出的代码,如下所示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(Arrays.asList("c", "b", "a", "d", "e", "j", "k"));
        System.out.println("Original list: ");
        System.out.println(list);

        // Let's say we are searching `a`
        int index = list.indexOf("a");
        if (index != -1 && ((index + 3) < list.size())) {
            // Remove element at index, index + 1, index + 2 and index +3
            for (int i = 1; i <= 4; i++) {
                list.remove(index);
            }
        }

        System.out.println("Updated list: ");
        System.out.println(list);
    }
}
注意事项:

Original list: 
[c, b, a, d, e, j, k]
Updated list: 
[c, b, k]
Original list: 
[c, b, a, d, e, j, k]
Updated list: 
[c, b, k]

  • 当找不到元素时,返回
    -1
  • 检查
    (index+3)
    以避免
    索引自动边界异常也很重要。例如,假设在索引
    2
    中找到了
    a
    ,之后只有一个元素,即列表总共只有
    4个
    元素。在这种情况下,尝试从索引
    4
    5
    访问(或)元素将引发
    IndexOutOfBoundsException

  • 我如何使用它来删除我的dd+它后面的3个元素?我不想删除某些索引中的某些特定元素,例如3到7之间的元素,我想删除与我的
    delnr
    字符串匹配的元素以及后面的3个其他元素,而不管dd的位置是0、4还是8等等。。如果我的
    delnr
    是“dd3”,那么我的数组列表中的
    dd3
    位于位置8,因此我猜子列表(8,12)会起作用,但是我的
    dd3
    也可以位于其他位置,例如0、4或12。您尝试过吗?它删除从i到i+4开始的项目(不包括i+4)。您注意到我提供的示例了吗?对不起,我在更新页面之前写了评论,注意到您还添加了“in your case”代码,谢谢。请您解释一下为什么要检查
    索引!=-1&((index+3)
    如果找不到元素,则返回
    -1
    ,我将不胜感激。查看以了解更多信息。我还使用了
    (index+3)a
    位于索引
    2
    处,之后只有一个元素,即列表总共只有4个元素。在这种情况下,尝试从索引
    4
    5
    中访问(获取或删除)元素将抛出
    IndexOutOfBoundsException
    。我已更新了答案以包含此解释。
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>(Arrays.asList("c", "b", "a", "d", "e", "j", "k"));
            System.out.println("Original list: ");
            System.out.println(list);
    
            // Let's say we are searching `a`
            int index = list.indexOf("a");
            if (index != -1 && ((index + 3) < list.size())) {
                // Remove element at index, index + 1, index + 2 and index +3
                for (int i = 1; i <= 4; i++) {
                    list.remove(index);
                }
            }
    
            System.out.println("Updated list: ");
            System.out.println(list);
        }
    }
    
    Original list: 
    [c, b, a, d, e, j, k]
    Updated list: 
    [c, b, k]