我是java新手。看起来很简单,但我不明白为什么会发生这种情况。
for (int i = -3; i < 3; i++){
set.add(i);
list.add(i);
}
for (int i = 0; i < 3; i++){
set.remove(i);
list.remove(i);
}
当它们打印自己时,设置打印 [-3, -2, -1](所需输出),而列表打印 [-2, 0, 2](不需要输出)。 对于 list.remove() 方法,由于它是重载的,因此它将其参数视为索引,而不是对象。这是正确的吗?为什么会发生这种情况以及如何修复列表以使用函数绑定(bind)打印所需的输出?
提前致谢。
最佳答案
Set.remove(Object)
删除等于 Object
的元素参数同时 List.remove(int index)
删除索引参数处的元素。
请注意remove(int index);
定义于 List
但不在 Set
中界面为Set
接口(interface)没有特定的元素顺序。
编译器选择与参数的声明类型更匹配的方法。对于List
, remove(int index);
哪一个与 int
更匹配.
关于Set.remove()
调用时,编译器将该方法绑定(bind)到 Set.remove(Object)
因为这是唯一的可能性,并且装箱功能允许转换 int
到Integer
在编译时。
正如 Aomine 所说,您正在寻找的是:
list.remove((Integer) i)
因为在这种情况下,对于编译器来说,两种方法都符合条件,但它选择 remove(Object obj);
因为它比 remove(int index);
更具体对于 Integer
已声明类型参数已传递。
关于java - set.remove 与 list.remove (函数绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795293/