【发布时间】:2013-01-26 07:05:11
【问题描述】:
我注意到 Java 中的 Set 和 SortedSet 接口之间存在逻辑上的不一致。
SortedSet 将不同的对象(通过 equal() 方法)识别为相等,如果它们在比较期间相同,但它在逻辑上是不正确的。对象的比较应该只负责对象的顺序。
例如:我可以有很多产品,我想按价格对它们进行排序。在这种情况下,SortedSet 不能包含价格相同的不同产品: [“盐”,0.5 美元], [“牛奶”, 1 美元], [“面包”, 1 美元], [“香蕉”, 2 美元] 在上面的例子中,牛奶将被面包代替。在这种情况下,继承的 Set 接口的约定将被违反,因为不相等的对象相互替换。我红色了 SortedSet 的 JavaDoc,并且知道这种行为有据可查,但我认为这是一个逻辑上的失败。
你的意见是什么,也许你已经对 Set 和 SortedSet 有过类似的问题?
【问题讨论】:
-
Why 所以您认为使用 equals() 进行相等是不正确的? '不相等的对象互相替换'是什么意思?
-
有时我想按名称排序产品,有时按日期排序。如果我直接在 Product.equals() 方法中实现按价格比较,那么我不能按日期对产品进行排序。此外,从逻辑上讲,如果价格相同,产品就不等于。
-
那你需要使用两个不同的比较器。
标签: java collections set sortedset