remove(Object o)
方法:
- 工作原理:该方法会遍历
ArrayList
,使用equals
方法逐个比较列表中的元素与传入的对象o
。一旦找到匹配的元素(即equals
方法返回true
),就将其从列表中删除。删除元素后,后续元素会向前移动一个位置,以填补被删除元素留下的空位。同时,列表的大小减1。
- 示例代码:
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemoveExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
boolean removed = list.remove("banana");
if (removed) {
System.out.println("Element removed successfully.");
} else {
System.out.println("Element not found.");
}
System.out.println("List after removal: " + list);
}
}
remove(int index)
方法:
- 工作原理:该方法直接删除指定索引位置的元素。索引位置从0开始计数。删除元素后,同样后续元素会向前移动一个位置,列表大小减1。
- 示例代码:
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemoveIndexExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
String removedElement = list.remove(1);
System.out.println("Removed element: " + removedElement);
System.out.println("List after removal: " + list);
}
}
- 两个方法的区别:
- 参数类型:
remove(Object o)
接受一个对象作为参数,通过equals
方法匹配要删除的元素;而remove(int index)
接受一个整数类型的索引作为参数,直接定位到要删除的元素位置。
- 返回值:
remove(Object o)
返回一个boolean
值,表示是否成功删除元素;remove(int index)
返回被删除的元素。
- 查找方式:
remove(Object o)
需要遍历列表进行查找匹配,时间复杂度在最坏情况下为O(n);remove(int index)
直接根据索引定位,时间复杂度为O(1)(不考虑数组元素移动的时间,移动元素的时间复杂度为O(n))。
- 删除操作可能引发的异常情况:
remove(int index)
:
IndexOutOfBoundsException
:当传入的索引小于0或者大于等于列表的当前大小(index < 0 || index >= size()
)时,会抛出该异常。例如,如果一个ArrayList
只有3个元素,调用remove(3)
就会抛出此异常。
remove(Object o)
:
NullPointerException
:如果ArrayList
中包含null
元素,并且调用remove(null)
时,由于null
对象调用equals
方法会抛出NullPointerException
,所以可能会出现该异常。另外,如果传入的对象o
为null
,并且ArrayList
中元素重写的equals
方法没有正确处理null
输入,也可能抛出NullPointerException
。但如果ArrayList
中不包含null
元素,并且传入的对象o
不为null
,通常不会抛出该异常。