深入剖析ArrayList的remove方法

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

ArrayList的remove方法

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

public E remove(int index)
public boolean remove(Object o)

按索引删除元素

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

	    List<Integer> 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<Integer> 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,并返回了true。

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

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

ArrayList remove方法的注意事项

少罗嗦,先看代码

public class ListRemove {
    public static void main(String[] args) {
        System.out.println("测试remove包装类型和非包装类型");
        ArrayList<Integer> myList = new ArrayList<Integer>();
        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(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中发生了重载

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • ArrayList在for循环中使用remove方法移除元素方法介绍

    有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码 List<Integer> list = new ArrayList<Integer>(); list.add(0); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); //正常循环 for (int i = 0; i < list.size(); i++

  • Java list.remove( )方法注意事项

    这篇文章给大家简单介绍了Java list.remove( )方法注意事项,具体内容如下: List<Integer> integerList = new ArrayList<>(); 当我们要移除某个Item的时候 remove(int position):移除某个位置的Item remove(object object):移除某个对象 那么remove(12)到底是移除第12的item,还是移除内容为12的Item. 那就要看12到底是int类型还是Integer类型,如果是i

  • Java中List遍历删除元素remove()的方法

    今天碰见根据条件进行list遍历remove的问题,第一时间就是简单for循环remove,只知道这么写不行,不安全,可是为什么呢?你想过吗?下面就关于List遍历remove的问题,深挖一下! 一.几种常见的遍历方式 1.普通for循环 2.高级for循环 3.iterator和removeIf 4.stream() 5.复制 6.普通for循环 --> 倒序方式 二.源码篇 1.普通for循环出错原因 public boolean remove(Object o) { if (o == nu

  • Java中ArrayList的removeAll方法详解

    本文介绍的是关于Java中ArrayList的removeAll方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 在开发过程中,遇到一个情况,就是从所有骑手Id中过滤没有标签的骑手Id(直接查询没有标签的骑手不容易实现), List<Integer> allRiderIdList = new ArrayList(); // 所有的骑手,大致有23W数据 List<Integer> hasAnyTagRiderId = new ArrayList(); // 有标签

  • java ArrayList.remove()的三种错误用法以及六种正确用法详解

    java集合中,list列表应该是我们最常使用的,它有两种常见的实现类:ArrayList和LinkedList.ArrayList底层是数组,查找比较方便:LinkedList底层是链表,更适合做新增和删除.但实际开发中,我们也会遇到使用ArrayList需要删除列表元素的时候.虽然ArrayList类已经提供了remove方法,不过其中有潜在的坑,下面将介绍remove方法的三种错误用法以及六种正确用法. 1.错误用法 1.1.for循环中使用remove(int index),列表从前往后

  • 深入剖析ArrayList的remove方法

    目录 ArrayList的remove方法 按索引删除元素 使用equals方法比较并删除元素 ArrayList remove方法的注意事项 总结 ArrayList的remove方法 从一个ArrayList中去除某个元素时会用到remove方法,这个方法有两个版本 public E remove(int index) public boolean remove(Object o) 按索引删除元素 如果接收的是一个int类型的值,则这个值表示的是要删除的元素的索引值,方法返回的值就是被删除的

  • java ArrayList中的remove方法介绍

    先看一段代码,看看自定义的ArrayList中的remove设计是否有问题. public class MyArrayList { private Object[] mData = new Object[0]; private int mSize = 0; // 删除第i个元素 public void remove(int i) { if (i < 0 || i >= mSize) return; for (int index = i; index < mSize - 1; index+

  • 浅谈java Iterator.remove()方法的用法(详解)

    实例如下: @Test public void tt(){ List<String> list = new ArrayList<String>(); list.add( "0" ); list.add( "1" ); list.add( "2" ); list.add( "3" ); list.add( "4" ); list.add( "5" ); list.a

  • C#.Net ArrayList的使用方法

    ArrayList就是传说中的动态数组,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小 1.如何使用ArrayList 最简单的例子: ArrayList List = new ArrayList(); for( int i=0;i<10;i++ ) //给数组增加10个Int元素 List.Add(i); //..程序做一些处理 List.RemoveAt(5);//将第6个元素移除 for( int i=0;i<3;i++

  • c# ArrayList的使用方法小总结

    *** Source URL: http://i.yesky.com/bbs/jsp/view.jsp?articleID=889992&forumID=150 *** 1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小 2.如何使用ArrayList 下面给大家显示一个最简单的例子: ArrayList List =

  • Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security 本质上是一连串的 Filter , 然后又以一个独立的 Filter 的形式插入到 Filter Chain 里,其名为 FilterChainProxy . 如图所示. 实际上 FilterChainProxy 下面可以有多条 Filter Chain ,来针对不同的URL做验证,而 Filter Chain 中所拥有的 Filter 则会根据定义的服务自动增减.所以无需要显示再定义这些 Filter ,除非想要实现自己的逻

  • 浅谈Java list.remove( )方法需要注意的两个坑

    list.remove 最近做项目的过程中,需要用到list.remove()方法,结果发现两个有趣的坑,经过分析后找到原因,记录一下跟大家分享一下. 代码 直接上一段代码,进行分析. public class Main { public static void main(String[] args) { List<String> stringList = new ArrayList<>();//数据集合 List<Integer> integerList = new

随机推荐