使用ConcurrentHashMap有点困惑。
所以,我将自己的类实例存储为键。 我们称之为约伯。 在这里。
public class Job {
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Job))
return false;
Job job = (Job)o;
return job.getId() == getId();
}
}
以下是我正在尝试用它做的事情:
Job jobToAdd = new Job();
jobToAdd.setId(1);
Job jobToRemove = new Job();
jobToRemove.setId(1);
ConcurrentMap<Job, Long> jobsQueue
= new ConcurrentHashMap<>();
jobsQueue.put(jobToAdd, jobToAdd.getId());
jobsQueue.containsKey(jobToRemove); //Returns FALSE
在某些时候,我想从此队列中删除作业。我正在使用作业类的不同实例,但它具有相同的ID。我假设 remove 正在搜索基于 equals 的密钥,不是吗?好吧, containsKey ,当然,即使 containsKey 也会返回FALSE。但是,
jobsQueue.keySet().iterator().next().equals(jobToRemove);
返回TRUE。
我在这里错过了什么吗?
非常感谢任何帮助!
谢谢!
安德烈
答案 0 :(得分:0)
原谅我的愚蠢......我完全忘了覆盖哈希函数。