ConcurrentHashMap.containesKey用于类的不同实例,但基于相等的方法相等

时间:2015-04-13 17:02:52

标签: concurrenthashmap

使用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。

我在这里错过了什么吗?

非常感谢任何帮助!

谢谢!

安德烈

1 个答案:

答案 0 :(得分:0)

原谅我的愚蠢......我完全忘了覆盖哈希函数。