假设我们有两个员工实例,它们有一些共同的属性,如id,name,address(所有值都相同)。
我想要唯一的对象列表而不实现Set。
请不要用Primitive数据类型解释逻辑,我想要Object类型的唯一性。
答案 0 :(得分:1)
简单:您创建一个“集合”类,调用使用“传入”对象的equals()
方法将它们与已存储的对象进行比较。
如果该方法提供了所有false
- 没有重复,则添加到集合中。如果true
- 不是唯一的。没有添加。
换句话说 - 你重新发明轮子并创建类似Java集的东西。当然,还有所有隐含的缺点 - 例如重复15到20年前在Java集实现中修复的实现错误。
答案 1 :(得分:1)
如果您不想使用Set
,请使用List
。实现唯一性检查逻辑所需要知道的只是equals(Object other)
方法的作用:
指示某个其他对象是否“等于”此对象
现在,您可以针对列表中当前的所有对象测试传入对象,如果找不到匹配项,则添加它。
显然,这种维护唯一对象集合的方法的性能远远低于基于散列和基于排序的集合。
答案 2 :(得分:0)
If you cannot use a Set
for holding unique instances of your Employee
class, you can use a List
. This requires you to do two things:
equals()
(and hashCode()
) in Employee
to contain the equality logic. This you would need even if you used a Set
.List.contains()
,以检查列表中是否已存在相等的对象。该方法将在内部使用您的Employee.equals()
实现。仅当项目不在列表中时才添加项目。请注意,此方法的效率非常低,因为在最坏的情况下需要迭代整个列表(当项目不在列表中时)。