java - 如何使类在 Java 中的不同 HashMap 中可用

标签 java hashset

我有一个类属性,它有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/

相关文章:

java - 在 Java 中格式化日期

java - IntelliJ IDEA "The selected directory is not a valid home for JDK"

java - 数据结构等同于 hashset 但有这些变化?

c++ - 如何让std::hash_set<pair<T1, T2>>编译运行

java - 在 Java 中迭代哈希表(谜题)

java - 为什么我的方法没有为类型对象定义?

java - 重复的 JEE JPA 类型查询总是进入数据库......第一级缓存困惑

Java 有序可哈希集合

java - 使用 2 个字符串集(组合它们)

c# - 从 IEnumerable 转换为 ISet