我有一个对象数组,我想将它与另一个对象数组连接,除了具有相同 id 的对象。该对象在系统中的许多地方都使用过,并且没有实现哈希码或等号。所以我不想实现 hashCode()
和 equals()
,因为我害怕在系统中使用这些对象的地方破坏某些东西,我不这样做不知道那件事。
我想将所有对象放在一个集合中,但不知何故使对象使用自定义 hashCode()
和 equals()
。类似于自定义 Comparator
的东西,但用于 equals。
最佳答案
是的,有可能做这样的事情。 (而且人们已经这样做了。)但它不允许你将你的对象放入 HashMap
、HashSet
等。这是因为标准集合类期望关键对象本身提供 equals
和 hashCode
方法。 (这就是它们的工作方式......)
替代方案:
实现一个包含真实类实例的包装类,并提供自己的
equals
和hashCode
实现。实现您自己的基于哈希表的类,这些类可以使用“可哈希”对象来提供等号和哈希码功能。
咬紧牙关,在相关类上实现
equals
和hashCode
覆盖。
事实上,第 3 个选项可能是最好的,因为您的代码库很可能需要使用一致的概念来说明这些对象相等的含义。还有其他一些事情表明您的代码需要大修。例如,它当前使用对象数组而不是 Set 实现来表示显然应该是集合的事实。
另一方面,当前实现可能存在/存在某些真实(或想象的)性能原因;例如减少内存使用。在这种情况下,您可能应该编写一堆辅助方法来执行诸如连接表示为数组的 2 个集合之类的操作。
关于java - 是否可以在 java 中制作类似 Comparator 但用于实现自定义 equals() 和 hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5204082/