有人的地方就有江湖,有代码的地方就有坑
一。集合
List与Set继承自Collection。Collection提供定义了一个移除元素的接口
boolean remove(Object o);
可以看出,在Collection中该方法的定义是移除入参元素,在Set及其继承和实现中仍然是如此,但在List系列则不同。
List提供了两个remove
E remove(int index); boolean remove(Object o);
可以看到第二种与Collection相似,但由于List是使用数组实现的,对于数组其自然能取到下标,因此就有了第一个remove。
对于一个List<Integer>,使用remove方法默认会调用第一个方法。
List<Integer> l = new ArrayList<>(); l.add(3); l.add(4); l.remove(1); System.out.println(l); Set<Integer> s = new HashSet<>(); s.add(3); s.add(4); s.remove(1); System.out.println(s); [3] [3, 4] Process finished with exit code 0
要使用Collection接口的remove方法定义,则需要给入参强转至Object
l.remove((Object)1);