我有一个类属性,它有2个变量,例如int a,b;
我想在两个不同的 HashSet 中使用类属性。
当a的值相同时,第一个哈希集认为对象相等。 但当b的值相同时,第二个哈希集认为对象相等。
我知道如果我覆盖 equals 方法,哈希集将使用 equals 的覆盖版本来比较两个对象,但在这种情况下,我需要两个不同的 equals 实现()
一种方法是创建属性的两个子类并为它们提供不同的 equals 方法,但我想知道是否有更好的方法这样我就不必创建属性的子类。
谢谢。
最佳答案
一种可能的解决方案是不使用HashSet
,而是使用TreeSet
。它是相同的 Set
接口(interface),但有一个 TreeSet
构造函数,可让您传入 Comparator
。这样您就可以保持 Attribute
类不变 - 只需创建两个不同的比较器并像这样使用它
Set<Attribute> setA = new TreeSet<Attribute>(comparatorForA);
Set<Attribute> setB = new TreeSet<Attribute>(comparatorForB);
比较器负责相等性检查(例如,如果 compare
返回 0,则对象相等)
关于java - 如何使类在 Java 中的不同 HashMap 中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961436/