[英]Can one use an Employee class as a key in a HashMap?
說明:可以使用 Employee class 作為 HashMap 中的鍵嗎?
是的,如果您正確設置了Employee
class。 您發布的內容列表就是您通過執行此操作“證明”的內容。
Object.equals
的javadoc 和Object.hashCode
的 javadoc列出了各種注意事項,例如:相等必須是自反的(這只是其中之一)。
如果您遵守所有這些注意事項,那么您可以使用 class 作為 hashmap 中的鍵。
鑒於您以這種方式提出了這個問題,這似乎很清楚,
[A] 你不知道這些東西,[B] 這是學習要求或工作申請的一部分。
結論很簡單:現在,你在這個任務上失敗了——你對這一切一無所知。 幸運的是,項目符號列表以及上面鏈接的 equals 和 hashCode 文檔為您提供了解決此問題的絕佳機會。 開始實驗,寫一個class,開始實現hashCode和equals。 看看會發生什么,做項目符號描述的事情(實現等於但不是哈希碼,看看當你創建 2 個看似相同的 Employee 對象時會發生什么,並注意如何將兩者都添加到 hashmap。違反相同“鍵”覆蓋的規則彼此)。
要記住一件事:
為了看到例如實現 hashCode 但不等於或反之亦然的問題,創建單獨的對象至關重要。 你想要這樣的東西:
Employee a = new Employee("Pooja");
Employee b = new Employee("Pooja");
Map<Employee, String> test = new HashMap<>();
test.put(a, "hello");
test.put(b, "world");
System.out.println(test.size());
這應該打印“1”。 如果您沒有正確執行文檔所說的操作,它將打印 2. 嘗試正確打印所需的內容 1. 嘗試當您故意弄亂例如 hashCode 和/或 equals 的實現時會發生什么。 弄清楚如果 hashCode 相同但 equals 表示它們不一樣會發生什么,等等。
像這樣的東西:
Employee a = new Employee("Pooja");
Map<Employee, String> test = new HashMap<>();
test.put(a, "hello");
test.put(a, "world"); // or
Employee b = a;
test.put(b, "goodbye");
觀察當你“弄亂”equals和hashCode時會發生什么並不是特別有用。
花一兩個小時,你就會在這個問題/測試/資格認證中獲得高分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.