以下是创建三个 User 对象并覆盖 equals 和 hashCode 方法,并将其存储在 HashSet 中的示例代码:\n\njava\nimport java.util.HashSet;\n\nclass User {\n private String name;\n private int age;\n\n public User(String name, int age) {\n this.name = name;\n this.age = age;\n }\n\n // 覆盖 equals 方法\n @Override\n public boolean equals(Object obj) {\n if (this == obj) {\n return true;\n }\n if (obj == null || getClass() != obj.getClass()) {\n return false;\n }\n User user = (User) obj;\n return age == user.age && name.equals(user.name);\n }\n\n // 覆盖 hashCode 方法\n @Override\n public int hashCode() {\n int result = name.hashCode();\n result = 31 * result + age;\n return result;\n }\n}\n\npublic class Main {\n public static void main(String[] args) {\n HashSet<User> userSet = new HashSet<>();\n\n User user1 = new User("John", 25);\n User user2 = new User("Jane", 30);\n User user3 = new User("John", 25);\n\n userSet.add(user1);\n userSet.add(user2);\n userSet.add(user3);\n\n System.out.println("HashSet size: " + userSet.size());\n }\n}\n\n\n在上面的示例中,我们创建了三个 User 对象:user1、user2 和 user3。这三个对象分别具有不同的 name 和 age 属性。我们在 User 类中覆盖 equals 和 hashCode 方法,以便 HashSet 能够正确地判断对象是否相等,并且能够正确地存储和检索对象。\n\n在 main 方法中,我们创建了一个 HashSet 对象 userSet,并将 user1、user2 和 user3 添加到其中。由于 user1 和 user3 具有相同的 name 和 age 属性,根据 equals 和 hashCode 方法的逻辑,它们被视为相等的对象,因此只有两个对象被成功添加到 HashSet 中。\n\n最后,我们输出 HashSet 的大小,结果应该是 2,因为 HashSet 中不允许存在重复的元素。\n\n总结\n\n当在 HashSet 中存储自定义对象时,覆盖 equals 和 hashCode 方法至关重要。这两个方法保证了 HashSet 能够正确地识别和处理重复元素,从而确保集合中的对象是唯一的。


原文地址: http://www.cveoy.top/t/topic/p3Mu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录