Java TreeSet与equals函数

Java TreeSet与equals函数,java,equals,comparator,treeset,Java,Equals,Comparator,Treeset,有一个JavaBean对象,它基于某些条件(条件a)实现了equals函数。我需要根据另一个标准(标准B)识别唯一的对象。由于equals函数使用条件A,因此我不能使用HashSet。因此,我考虑将TreeSet与基于标准B的自定义Comparator一起使用。我的问题是,允许这样做吗?这种方法有什么问题吗 谢谢。以下是一些来自Oracle Java的指南: 请注意,由 设置(无论是否为显式 必须提供比较器) 如果是,则与相等一致 正确实现Set接口。 (参考可比或比较器,了解 精确的定义符合

有一个JavaBean对象,它基于某些条件(条件a)实现了
equals
函数。我需要根据另一个标准(标准B)识别唯一的对象。由于
equals
函数使用条件A,因此我不能使用
HashSet
。因此,我考虑将
TreeSet
与基于标准B的自定义
Comparator
一起使用。我的问题是,允许这样做吗?这种方法有什么问题吗


谢谢。

以下是一些来自Oracle Java的指南:

请注意,由 设置(无论是否为显式 必须提供比较器) 如果是,则与相等一致 正确实现Set接口。 (参考可比或比较器,了解 精确的定义符合 这是因为 接口是根据 等于运算,但不是树集 实例执行所有键比较 使用其compareTo(或compare) 方法,因此两个键被视为 通过此方法,等于 集合的立场,相等。这个 集合的行为是定义良好的 如果其顺序与 等于;它就是不遵守规则 集合接口的总承包


我认为在技术方面,不,你没有任何问题。但是,在编码、可读性和可维护性方面,你必须小心,因为其他人可能误用或误解你正在做的事情

如果你经常执行搜索,并且很少添加元素,考虑把它们放在一个<代码>列表/<代码>标准B中排序并使用. 您可以包装它们:

class BeanWrapper {

 ...

 public boolean equals(Object other) {
  return myBean.critB.equals(((Bean)other).critB);
 }

}
然后像那样把它们放在布景里