深入剖析ArrayList的remove方法
目录
- ArrayList的remove方法
- 按索引删除元素
- 使用equals方法比较并删除元素
- ArrayList remove方法的注意事项
- 总结
ArrayList的remove方法 从一个ArrayList中去除某个元素时会用到remove方法,这个方法有两个版本
public E remove(int index)public boolean remove(Object o)
按索引删除元素
如果接收的是一个int类型的值,则这个值表示的是要删除的元素的索引值,方法返回的值就是被删除的元素,如果索引值在实际的范围外,则会抛出IndexOutOfBoundsException异常。
Listintegers = new ArrayList<>(5); integers.add(1); integers.add(2); integers.add(8); integers.add(4); integers.add(5); System.out.println(integers.remove(2)); System.out.println(integers);
删除索引为2的元素(8),remove返回值即为8
文章图片
使用equals方法比较并删除元素
如果接收的是一个object类型的值,则会依次和list中每个元素比较(使用的是equals方法),如果存在,就删除掉第一个遇到的元素,并返回true。
Listintegers = new ArrayList<>(5); integers.add(1); integers.add(2); integers.add(8); integers.add(2); integers.add(5); System.out.println(integers.remove(Integer.valueOf(2))); System.out.println(integers); System.out.println(integers.remove(Integer.valueOf(3))); System.out.println(integers);
可见将2转换为Integer类型后,调用的remove方法和上面的就不同了,删除了2,并返回了true。
如果比较之后不存在这样的元素,就返回false。
文章图片
所以对于保存了Integer类型的ArrayList来说,因为自动装箱机制的存在,可能添加元素的时候直接使用int类型的元素即可。但是在删除元素的时候就需要注意,如果想要寻找特定元素进行删除,就需要将int值转换为Integer再作为参数传给remove元素,否则传入的int值会作为索引,导致删除错误的元素。
ArrayList remove方法的注意事项 少罗嗦,先看代码
public class ListRemove {public static void main(String[] args) {System.out.println("测试remove包装类型和非包装类型"); ArrayListmyList = new ArrayList (); for (int k = 0; k < 10; k++) {myList.add((k + 1) * 10); }System.out.println("myList:" + myList); // remove(8) 是删掉下标为8的元素System.out.println(String.format("%s:%s myList:%s", "remove(8)", myList.remove(8), myList)); // 把元素80换成8myList.set(myList.indexOf(80), 8); Collections.shuffle(myList); System.out.println("myList:" + myList); // myList.remove(Integer.valueOf(8)) 是删掉8这个元素System.out.println(String.format("%s:%s myList:%s", "remove(Integer.valueOf(8))", myList.remove(Integer.valueOf(8)), myList)); }}
output:
测试remove包装类型和非包装类型
myList:[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
remove(8):90 myList:[10, 20, 30, 40, 50, 60, 70, 80, 100]
myList:[20, 50, 40, 60, 100, 10, 30, 70, 8]
remove(Integer.valueOf(8)):true myList:[20, 50, 40, 60, 100, 10, 30, 70]
总结
如果ArrayList内装的是Integer对象,则 .remove(8)是删掉下标为8的元素
.remove(Integer.valueOf(8)) 是删掉8这个元素
查看源码,发现public E remove(int index)是ArrayList父类AbstractList的方法;public boolean remove(Object o)是AbstractList的父类AbstractCollection中的方法。
【深入剖析ArrayList的remove方法】
文章图片
在ArrayList中发生了重载
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 深入理解Go之generate
- 【1057快报】深入机关,走下田间,交通普法,共创文明
- 生发知识,带你深入了解
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- 深入浅出谈一下有关分布式消息技术(Kafka)
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了
- mysql|一文深入理解mysql
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Java并发编程|Java并发编程 - 深入剖析ReentrantLock之非公平锁加锁流程(第1篇)
- 深入浅出JavaScript8章节第01章语法