ArrayList中remove的坑

package com.sheting.basic.collection.aslist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestArrayListRemove {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("aa", "bb", "cc");
        /*
         * list.remove(0); //java.lang.UnsupportedOperationException
         * System.out.println(list);
         */

        List<String> list2 = new ArrayList<>();
        list2.add("dd");
        list2.add("ee");
        list2.add("ff");
        list2.remove(0);
        System.out.println(list2); // [ee, ff]

        Integer j = 1;
        list2.remove(j);
        System.out.println(list2); // [ee, ff] 注意这里没有删除掉 ff
    }
}

1.0 Arrays.asList 和 new ArrayList()是不同的,Arrays.asList 中的一个内部类ArrayList,这个内部类比 new ArrayList()的功能少,且有一些细小的差异。
Arrays.asList没有实现remove()方法,调用父类的AbstractList remove()方法,但是父类的实现就是抛出UnsupportedOperationException异常。

2.0 ArrayList中有这样两个重载方法,因此调用remove()方法时,传入int 和 Integer执行的方法是不一样的,所以int remove 元素了,Integer没有remove元素。

Integer equals()源码如下,因为传入的是String,因此直接返回false.

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

猜你喜欢

转载自blog.csdn.net/tb9125256/article/details/81151938
今日推荐