java - 我可以只使用HashMap吗?

标签 java hashmap hashset

上下文

我有一个带有 4 个原始变量的对象 O:

  • a、b、c 和 d。 (全部 4 项必填)

  • 前 3 个是键,我用它们来生成 hashcode 和 equals。

  • “d”是一个计数器,从1开始。

  • 我有一个 HashSet 和一个插入 O 个项目的循环,

  • 如果 HashSet 包含重复项(键:a、b、c),我将修改存储在 HashSet 中的项 O 来执行 d++(否则我将该项添加到 HashSet)。

但是我无法从 HashSet 获取项目(HashSet 没有 .get 方法)。

问题

所以处理这个问题的唯一(也是最好的)方法是创建 HashMap ?

我的解决方案

    class O {
       int a, b, c, d;

       boolean equals(Object o) { /* handle only a,b,c */ }
       int hashCode() { /* handle only a,b,c */ }
    }

...


        HashMap<O, O> group = new HashMap<O, O>();
        O curr = null;
...
            while (...) //Iterate the result set from a query where I can't use groupBy
            {
                curr = new O();
                curr.setA(...);
                curr.setB(...);
                curr.setC(...);
                O ex = group.get(curr);
                if (ex != null)
                {
                    ex.setD(ex.getD()+1);
                }
                else
                {
                    group.put(curr , curr);
                }
            }

最佳答案

我认为更简单的方法可能是以下内容:

class O {
   int a, b, c;

   boolean equals(Object o) { /* your code */ }
   int hashCode() { /* your code */ }
}

Map<O, Integer> map = new HashMap<>();
for (O obj: oCollection) {
   if (map.contains(obj)) {
       map.put(obj, map.get(obj) + 1);
   } else {
       map.put(obj, 1);
   }
}

这样你就可以使用HashMap而不是类中的额外字段来计算它们。

关于java - 我可以只使用HashMap吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061100/

相关文章:

java - 在 MacOS 上手动创建 Bundle for Java 7 jar 文件

java - HashMap 何时以及如何将桶从链表转换为红黑树?

java - 即使文件位于同一个包中,也找不到这样的文件或目录

java - 如何比较两个文本文件的内容并输出到另一个文本文件中?文本1 - 文本2

Java:基于磁盘的快速哈希集

Java HashSet 使用自定义类作为键 : "contains()" function always return false

java - 具有不同对象类型的重复代码

java - 标签库存储在哪里?

java - 如果从 Maven 运行,Cucumber 测试结果总是返回 0

c++ - unordered_map 真的是无序的吗?