上下文
我有一个带有 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/