Java的ArrayList中关于删除的常用操作及方法

目录

remove(int index)方法

remove(Object o)方法

removeAll​(Collection c)方法

removeIf​(Predicate filter)方法

removeRange​(int fromIndex, int toIndex)方法


remove(int index)方法

remove(int index)是ArrayList类中用于删除指定位置元素的方法。它接收一个整型参数index,表示要删除的元素在列表中的索引位置。该方法会删除列表中索引为index的元素,并将其后面的元素往前移动一位,填补被删除的元素位置。返回值是被删除的元素。

具体实现中,ArrayList内部使用数组来存储元素,因此删除元素时需要将被删除元素之后的所有元素都向前移动一位,以保证数组不出现空洞。

下面是一个简单的示例,演示了如何使用ArrayList的remove(int index)方法来删除指定位置的元素: 

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 创建一个ArrayList并添加一些元素
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        list.add("Grape");
        
        System.out.println("原始列表:" + list);
        
        // 删除索引为1的元素(即第二个元素)
        String removedElement = list.remove(1);
        
        System.out.println("删除的元素是:" + removedElement);
        System.out.println("操作后的列表:" + list);
    }
}

上述示例创建了一个ArrayList,并向其中添加了一些水果。然后使用remove(int index)方法删除了索引为1的元素(即第二个元素),并打印出被删除的元素以及操作后的列表。

运行该示例,将会输出以下结果:

原始列表:[Apple, Banana, Orange, Grape]
删除的元素是:Banana
操作后的列表:[Apple, Orange, Grape]

remove(Object o)方法

remove(Object o)是ArrayList类中的方法,用于从列表中删除第一个匹配到的指定元素。它接收一个参数o,表示要删除的元素对象。该方法会遍历列表,找到与参数o相等的第一个元素,并将其从列表中删除。

具体实现中,ArrayList内部使用数组来存储元素。当调用remove(Object o)方法时,它会依次比较列表中的每个元素与参数o的相等性。如果找到匹配项,则删除该元素,并将后面的元素向前移动一位来填补被删除的位置。返回值是一个布尔值,表示是否成功删除了元素。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 创建一个ArrayList并添加一些元素
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        list.add("Grape");
        list.add("Banana");
        
        System.out.println("原始列表:" + list);
        
        // 删除指定的元素
        boolean isRemoved = list.remove("Banana");
        
        if (isRemoved) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        
        System.out.println("操作后的列表:" + list);
    }
}

上述示例创建了一个ArrayList,并向其中添加了一些水果。然后使用remove(Object o)方法删除了指定的元素(这里是"Banana"),并根据返回值判断是否删除成功。

运行该示例,将会输出以下结果:

原始列表:[Apple, Banana, Orange, Grape, Banana]
删除成功!
操作后的列表:[Apple, Orange, Grape, Banana]

removeAll​(Collection<?> c)方法

removeAll(Collection<?> c)是ArrayList类中的方法,用于从列表中删除所有与指定集合中包含的元素相等的元素。它接收一个参数c,表示要删除的元素集合。该方法会遍历列表,并删除与集合c中包含的元素相等的所有元素。

具体实现中,ArrayList内部使用数组来存储元素。当调用removeAll(Collection<?> c)方法时,它会遍历列表中的每个元素,并将其与集合c中的每个元素进行比较。如果找到匹配项,则删除列表中的该元素,并将后面的元素向前移动一位来填补被删除的位置。返回值是一个布尔值,表示是否成功删除了元素。

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

public class Main {
    public static void main(String[] args) {
        // 创建一个ArrayList并添加一些元素
        List<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange", "Grape", "Banana"));
        
        // 创建一个要删除的集合
        List<String> list2 = new ArrayList<>(Arrays.asList("Banana", "Orange"));
        
        System.out.println("原始列表:" + list1);
        
        // 删除与list2中包含的元素相等的所有元素
        boolean isModified = list1.removeAll(list2);
        
        if (isModified) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        
        System.out.println("操作后的列表:" + list1);
    }
}

在上述示例中,我们首先创建了一个ArrayList list1,并向其中添加了一些水果。然后,我们创建了另一个ArrayList list2,其中包含要从 list1 中删除的元素。接下来,我们调用 list1.removeAll(list2) 方法,它会删除 list1 中所有与 list2 中包含的元素相等的元素。

运行该示例,将会输出以下结果:

原始列表:[Apple, Banana, Orange, Grape, Banana]
删除成功!
操作后的列表:[Apple, Grape]

removeIf​(Predicate<? super E> filter)方法

removeIf(Predicate<? super E> filter)是List接口中的一个默认方法,用于根据给定的条件(Predicate)删除列表中满足条件的元素。它接收一个参数filter,表示要应用的条件。

具体实现中,removeIf(Predicate<? super E> filter)方法会遍历列表中的每个元素,并使用给定的条件(Predicate)对元素进行判断。如果判断结果为true,则删除该元素。返回值是一个布尔值,表示是否成功删除了元素。

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

public class Main {
    public static void main(String[] args) {
        // 创建一个ArrayList并添加一些元素
        List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange", "Grape"));
        
        System.out.println("原始列表:" + list);
        
        // 删除长度小于6的元素
        Predicate<String> condition = str -> str.length() < 6;
        list.removeIf(condition);
        
        System.out.println("操作后的列表:" + list);
    }
}

在上述示例中,我们首先创建了一个ArrayList list,并向其中添加了一些水果。然后,我们定义了一个谓词(Predicate)condition,它用于筛选要删除的元素。具体来说,该谓词会判断字符串的长度是否小于6。

接下来,我们调用 list.removeIf(condition) 方法,它会删除满足条件的所有元素。

运行该示例,将会输出以下结果:

原始列表:[Apple, Banana, Orange, Grape]
操作后的列表:[Banana, Orange]

removeRange​(int fromIndex, int toIndex)方法

removeRange(int fromIndex, int toIndex)方法是ArrayList类的一个受保护方法,用于删除列表中指定范围内的元素。该方法接受两个参数:fromIndex表示要删除范围的起始索引(包括),toIndex表示要删除范围的结束索引(不包括)。

需要注意的是,removeRange(int fromIndex, int toIndex)方法是ArrayList类中的受保护方法,意味着它只能在ArrayList的子类中访问和使用。这是为了避免直接暴露删除范围的操作,因为在删除范围后,列表的内部结构可能会发生不连续或混乱的变化。

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

public class Main<E> extends ArrayList<E> {
    public void removeElementsInRange(int fromIndex, int toIndex) {
        if (fromIndex < 0 || toIndex > size() || fromIndex > toIndex) {
            throw new IndexOutOfBoundsException();
        }
        
        removeRange(fromIndex, toIndex);
    }
    
    public static void main(String[] args) {
        // 创建一个CustomArrayList并添加一些元素
        Main<String> list = new Main<>();
        list.addAll(Arrays.asList("Apple", "Banana", "Orange", "Grape"));

        System.out.println("原始列表:" + list);

        // 删除索引为1到3之间的元素(不包括3)
        list.removeElementsInRange(1, 3);

        System.out.println("操作后的列表:" + list);
    }
}

在这个示例中,我们创建了一个自定义的ArrayList子类Main,它继承了ArrayList,并添加了一个新的方法removeElementsInRange(int fromIndex, int toIndex)。在该方法内部,我们首先进行参数的合法性检查,确保起始索引和结束索引在有效范围内。然后,我们调用removeRange(fromIndex, toIndex)方法来实际删除指定范围内的元素。

运行该示例,将会输出以下结果:

原始列表:[Apple, Banana, Orange, Grape]
操作后的列表:[Apple, Grape]

需要注意的是,尽管我们可以在子类中使用removeRange(int fromIndex, int toIndex)方法,但在一般情况下,推荐使用更高级别的方法,如removeAll(Collection<?> c)或removeIf(Predicate<? super E> filter)来删除元素。这些方法更易于使用,并提供了更灵活的条件判断,以满足不同的需求。

猜你喜欢

转载自blog.csdn.net/m0_74293254/article/details/134587090