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)来删除元素。这些方法更易于使用,并提供了更灵活的条件判断,以满足不同的需求。