【发布时间】:2021-04-28 15:39:59
【问题描述】:
我已阅读线程Difference in LinkedList, queue vs list,但仍然不明白以下代码行为:
List<Integer> l = new LinkedList<>();
l.add(10);
l.add(12);
l.remove(1); // removes index 1
System.out.println(l); // outputs [10]
Queue<Integer> q2 = new LinkedList<>();
q2.add(10);
q2.add(12);
q2.remove(1); // tries to remove object 1
System.out.println(q2); // outputs [10, 12]
我知道,为什么输出不同:
- 如果是
l,调用remove(1)会删除索引为1的元素 - 如果是
q,则调用remove(1)会尝试删除对象1,但只有整数10和12。
如果我仔细看看接口:
-
Queue 没有
remove(int)方法,但从Collection 继承了remove(Object)方法。 -
List 有一个
remove(int index)和remove(Object o)方法。
到目前为止,一切都很好。
但是:我不明白,Java 是如何在使用相同语法 (remove(1)) 的同时调用两种不同的方法的?
【问题讨论】:
-
是的。尽可能避免自动装箱/拆箱。在您的 IDE 中为此启用编译器警告
标签: java list linked-list queue