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;
}