假设我们有两个员工实例,具有一些共同的属性,如id,name,地址(所有值都相同(。
我想要唯一对象列表而不实现 Set。
请不要用原始数据类型解释逻辑,我想要对象类型的唯一性。
很简单:你创建一个"集合"类,该类调用使用"传入"对象的equals()
方法来将它们与已经存储的对象进行比较。
如果该方法提供所有false
- 没有重复项,则添加到集合中。如果true
- 不是唯一的。无需添加。
换句话说 - 你重新发明了轮子并创建了类似于Java集的东西。当然,尽管存在所有隐含的缺点 - 例如重复 15 到 20 年前在 Java 集实现中修复的实现错误。
如果您不想使用Set
,请使用List
。实现唯一性检查逻辑所需知道的只是equals(Object other)
方法的作用:
指示某个其他对象是否"等于"此对象
现在,您可以针对列表中当前的所有对象测试传入对象,如果未找到匹配项,则添加该对象。
显然,这种维护唯一对象集合的方法的性能远远不如基于哈希和基于排序的集合。
如果无法使用Set
来保存Employee
类的唯一实例,则可以使用List
。这需要您做两件事:
- 覆盖
Employee
中的equals()
(和hashCode()
(以包含相等逻辑。即使您使用Set
,您也需要这样做。 - 每次向列表中添加项目时,请使用
List.contains()
检查列表中是否已有相等的对象。该方法将在内部使用Employee.equals()
实现。仅当项目尚未在列表中时,才添加该项目。请注意,此方法效率非常低,因为它需要在最坏的情况下(当项目尚未在列表中时(遍历整个列表。