Equals和HashMap / HashSet

时间:2017-01-20 10:33:20

标签: equals hashcode

如果我覆盖模型类中的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上的概念并等于合同,但在这里我失败了。

1 个答案:

答案 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,它会覆盖旧条目。