需要對散列碼和hashcode中的equals方法提出一些問題和解釋。下面是問題:何時覆蓋hashcode和equals方法在java中
- 什麼時候在put或get期間調用hashcode和equals會被調用?
- 當我們存儲自定義對象時,我在每個教程中發現我們需要重寫hashcode。但如果我不重寫,那麼它會產生相同的結果。除了當我使用新的運營商。下面是示例程序:
我將員工對象存儲到散列映射中,然後我沒有重寫散列碼和等於方法,那麼代碼按預期工作。
Employee e1= new Employee("ram", 1000);
Employee e2= new Employee("sai", 1001);
Employee e3= new Employee("krishna", 1002);
System.out.println("e1.hashCode() : "+e1.hashCode());
System.out.println("e2.hashCode() : "+e2.hashCode());
System.out.println("e3.hashCode() : "+e3.hashCode());
Map<Employee, String> map= new HashMap<Employee, String>();
map.put(e1, "employee1");
map.put(e2, "employee2");
map.put(e3, "employee3");
for (Entry<Employee, String> entry : map.entrySet())
{
System.out.println(entry.getKey().getName() +"-"+entry.getKey().getid() + "-" + entry.getValue());
}
System.out.println(map.get(e3));
System.out.println(map.get(new Employee("krishna", 1002)));
- 當你重寫equals,需要被照顧什麼東西。
- 當您重寫散列碼時,需要注意哪些事項。
- 當您只覆蓋等於,那麼默認哈希碼將如何表現。
- 當你只重寫哈希碼,那麼該如何默認平等的行爲。*
夥計,這就像你甚至沒有嘗試。這些問題在谷歌第一頁的任何結果中回答爲「java equals hashCode」。 –
嘗試再次添加相同的員工,但作爲新的實例:'員工e4 =新員工(「克里希納」,1002);'然後它會停止工作,因爲你期望。 – RadekJ
除了作爲(其他許多人)的副本之外,你的問題太廣泛了,而且在問你問題之前,你顯然還沒有充分研究過這個問題(例如用Google搜索答案)。 –