我正在读一篇IBM DeveloperWorks article了解ConcurrentHashMap是如何实现的。 “删除操作”部分表明删除操作是一个两步过程:
- 找到 Entry 元素并将其设为 null
- 从头部到已删除元素的链部分将被克隆并连接到已删除元素之后的链的其余部分。
我在这里有一个问题,因为我检查了Docjar处的相应代码我在 remove(Object key, int hash, Object value)
中没有看到任何克隆。
我不确定我是否遗漏了什么,或者实现与文章不同?
最佳答案
线路
head = new Entry(p.hash, p.key, p.value, head);
进行克隆,它不是“Object.clone()”克隆,而是“复制构造函数”——这仍然是更一般意义上的克隆。
请注意,此行是 10 年前的文章中的内容,在当前的实现中找不到,其中 remove(Object key, Object value)
的实现完全不同。
关于java - ConcurrentHashMap 实现在删除操作中是否使用克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15174461/