TreeSet和equals函数

Suj*_*jee 9 java equals comparator treeset

有一个Java bean对象,它equals根据某些标准实现了功能(标准A).我需要根据其他标准识别唯一对象(标准B).由于该equals功能使用标准A,我无法使用HashSet.所以我考虑使用基于标准B的TreeSet我的自定义Comparator.我的问题是,是否允许这样做?这种方法有什么问题吗?

谢谢.

vod*_*ang 15

以下是Oracle Java的一些指南:

请注意,如果要正确实现Set接口,则由set维护的排序(无论是否提供显式比较器)必须与equals一致.(请参阅Comparable或Comparator以获得与equals一致的精确定义.)这是因为Set接口是根据equals操作定义的,但TreeSet实例使用compareTo(或compare)方法执行所有键比较,因此从集合的角度来看,通过这种方法被认为相等的密钥是相等的.集合的行为即使其排序与equals不一致也是明确定义的; 它只是不遵守Set接口的一般合同.

我认为在技术方面,不,你没有任何问题.但是,在编码,可读性和可维护性方面,你必须要小心,因为其他人可能会滥用或误解你在做什么