当我们想删除Java List对象中的某一个的时候,可以选择根据索引删除,也可以根据对象删除,调用的方法都是remove。
但是当我们对一个List<Integer>对象删除某个元素的,remove(i) 是删除索引为i的元素,还是删除值为i的元素。
class Solution {
public static void main(String[] args) {
List<Integer> ls = new ArrayList<>();
ls.add(1);
ls.add(2);
ls.add(3);
ls.add(4);
System.out.println(ls);
ls.remove(1);
System.out.println(ls);
ls.remove(Integer.valueOf(4));
System.out.println(ls);
}
}
/*结果
[1, 2, 3, 4]
[1, 3, 4]
[1, 3]
*/
可以看出当直接传入一个int值时,它是默认删除索引对应的元素。如果是传入一个Integer对象的时候,他是删除那个值的元素。
因为List中保存的是Integer类型的值,int类型找不到,所以认为是索引。
幸好List<T> T不能为基本类型,不然就乱套了。