Java中ArrayList删除的常用操作及方法
作者:世俗ˊ
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)来删除元素。这些方法更易于使用,并提供了更灵活的条件判断,以满足不同的需求。
到此这篇关于Java中ArrayList删除的常用操作及方法的文章就介绍到这了,更多相关Java ArrayList删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!