ArrayList<Integer>的remove(Object)与remove(index)方法调用时候会选择哪一个

有一天写代码,遇到ArrayList<Integer>的remove(Object)与remove(index)方法调用时候会选择哪一个的问题,其实并不复杂,这里还是进行记录。

例如:

ArrayList<Integer> list=new ArrayList<>();
int a=1;
list.add(a);
list.remove(a);

此时会报出错误,因为代码最后一行调用的是remove(index),index=1的元素是不存在的;

那么如何调用remove(Object)呢?

可以采用以下代码:

list.remove(Integer.valueOf(a));

因为定义的list是Integer对象的list,所以调用删除对象的方法,必须传入Integer对象。

 

一般来说,采用索引方式删除效率会更高;对象方式删除需要遍历列表,索引删除只需要检查索引合法。

好的,以下是基于 Java 语言实现的 ArrayList 类,包括 add、get、size、indexOf、remove 方法的实现以及在每个功能前的注释说明: ```java public class ArrayList<T> { // 初始化数组大小为10 private static final int DEFAULT_CAPACITY = 10; // 内部存储元素的数组 private Object[] elementData; // 数组中元素的个数 private int size; // 无参构造函数,初始化数组大小为10 public ArrayList() { this.elementData = new Object[DEFAULT_CAPACITY]; this.size = 0; } // 有参构造函数,初始化数组大小为 capacity public ArrayList(int capacity) { this.elementData = new Object[capacity]; this.size = 0; } // 向 ArrayList 中添加元素 public void add(T element) { // 判断数组是否已满,如果已满,则进行扩容 if (size == elementData.length) { ensureCapacity(size + 1); } elementData[size++] = element; } // 获取 ArrayList 中指定下标的元素 public T get(int index) { // 检查下标是否越界 rangeCheck(index); return (T) elementData[index]; } // 获取 ArrayList 中元素的个数 public int size() { return size; } // 获取指定元素在 ArrayList 中的下标 public int indexOf(T element) { // 遍历数组,找到第一个指定元素相等的元素 for (int i = 0; i < size; i++) { if (element.equals(elementData[i])) { return i; } } return -1; } // 从 ArrayList 中删除指定元素 public void remove(T element) { int index = indexOf(element); if (index >= 0) { remove(index); } } // 从 ArrayList 中删除指定下标的元素 public void remove(int index) { // 检查下标是否越界 rangeCheck(index); // 将该元素后面的所有元素向前移动一个位置 int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(elementData, index + 1, elementData, index, numMoved); } // 将最后一个元素置为 null,并将 size 减1 elementData[--size] = null; } // 扩容数组 private void ensureCapacity(int minCapacity) { if (minCapacity > elementData.length) { Object[] newElementData = new Object[newCapacity(minCapacity)]; System.arraycopy(elementData, 0, newElementData, 0, size); elementData = newElementData; } } // 计算新的数组大小 private int newCapacity(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity < minCapacity) { newCapacity = minCapacity; } if (newCapacity > Integer.MAX_VALUE - 8) { newCapacity = Integer.MAX_VALUE - 8; } return newCapacity; } // 检查下标是否越界 private void rangeCheck(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } } // 测试 ArrayList 类的各个方法 public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); System.out.println("size: " + list.size()); // 打印输出:size: 3 System.out.println("element at index 1: " + list.get(1)); // 打印输出:element at index 1: Python System.out.println("index of element \"Java\": " + list.indexOf("Java")); // 打印输出:index of element "Java": 0 list.remove(1); System.out.println("size after remove: " + list.size()); // 打印输出:size after remove: 2 } } ``` 在上述代码中,我们使用泛型来实现 ArrayList 类,可以添加任意类型的元素。在主方法中,我们创建了一个 ArrayList 对象,向其中添加了三个元素,并调用了各个方法来测试其功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值