【发布时间】:2015-12-03 08:29:50
【问题描述】:
上下文
我有一个带有 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);
}
}
【问题讨论】:
-
不,通过HashSet是可能的
-
你能展示你的代码吗?
-
我觉得HashMap很适合,为什么不用呢?
-
不清楚,为什么不能从HashSet中获取item。
-
只是回顾一下,以及我是否正确理解了这个问题。您想要带有私有 get 方法的 HashMap 吗?