如果我覆盖模型类中的equals方法并返回false。并且hashCode总是返回一个常量值。如果我创建一个Object并将其添加到Set HashSet / HashMAp如何检测重复项?
public class Employee {
int id;
String name;
@Override
equals(){
return false;
}
}
public static void main(String[] args) {
HashMap<Employee,String> hk= new HashMap<Employee,String>();
Employee e1 = new Employee();
e1.setId(18);
e1.setName("roohi");
hk.put(e1, "hello");
hk.put(e1, "hello");
}
如果Equals方法返回false,则e1.equals(e1)
返回false。因此值应该添加两次,但只添加一个。任何人都可以解释一下。我用Google搜索并清除了我在HashCode上的概念并等于合同,但在这里我失败了。
答案 0 :(得分:1)
如果你仔细看看Map.put方法
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
如果您注意到这行代码
@FXML
private void handleSave() {
File itemFile = mainApp.getItemFilePath();
if (itemFile != null) {
mainApp.saveItemDataToFile(itemFile);
} else {
handleSaveAs();
}
}
虽然你已经覆盖了相等的方法,但仍然(k = e.key)== key的计算结果为true,它会覆盖旧条目。