深入剖析ArrayList的remove方法

网友投稿 249 2022-09-26


深入剖析ArrayList的remove方法

目录ArrayList的remove方法按索引删除元素使用equals方法比较并删除元素ArrayList remove方法的注意事项总结

ArrayList的remove方法

从一个ArrayList中去除某个元素时会用到remove方法,这个方法有两个版本

public E remove(int index)

public boolean remove(Object o)

按索引删除元素

如果接收的是一个int类型的值,则这个值表示的是要删除的元素的索引值,方法返回的值就是被删除的元素,如果索引值在实际的范围外,则会抛出IndexOutOfBoundsException异常。

List integers = 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。

List integers = 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,并返回了tnoOIrjqrue。

如果比较之后不存在这样的元素,就返回false。

所以对于保存了Integer类型的ArrayList来说,因为自动装箱机制的存在,可能添加元素的时候直接使用int类型的元素即可。但是在删除元素的时候就需要注意,如果想要寻找特定元素进行删除,就需要将int值转换为Integer再作为参数传给remove元素,否则传入的int值会作为索引,导致删除错误的元素。

ArrayList remove方法的注意事项

少罗嗦,先看代码

public class ListRemove {

public static void main(String[] args) {

System.out.println("测试remove包装类型和非包装类型");

ArrayList myList = 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换成8

myList.set(myList.indexOf(80), 8);

Collections.shuffle(myList);

System.out.println("myList:" + myList);

// myList.remove(IntegenoOIrjqr.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中发生了重载


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ImportError: DLL load failed: 操作系统无法运行 %1
下一篇:Cisco 2821路由器密码恢复(自己查不到,才写文章,让其他达达不需要像我一样花费那么多时间)(cisco是什么牌子)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~