java - set.remove 与 list.remove (函数绑定(bind))

标签 java list set

我是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)因为这是唯一的可能性,并且装箱功能允许转换 intInteger在编译时。

正如 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/

相关文章:

java - 将 Java 与 .NET 集成?

html - 具有下拉列表 li 宽度的 css 菜单

python - 在 Python 中打印集合时删除集合标识符

Python,mysql.connector 错误 : No Result Set to Fetch From; cgitb shows correct value being passed to function

java - ASN.1 模块描述错误

Java正则表达式路径提取

java - Selenium 通过 java - sendKeys 不会发送特定字符到输入

java - Java 类 java.util.ArrayList 的消息体编写器

c# - 如何删除c#列表中的重复项

c++ - 创建给定变量集的所有可能排列