java - ConcurrentHashMap 实现在删除操作中是否使用克隆?

标签 java list collections hashmap java.util.concurrent

我正在读一篇IBM DeveloperWorks article了解ConcurrentHashMap是如何实现的。 “删除操作”部分表明删除操作是一个两步过程:

  1. 找到 Entry 元素并将其设为 null
  2. 从头部到已删除元素的链部分将被克隆并连接到已删除元素之后的链的其余部分。

我在这里有一个问题,因为我检查了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/

相关文章:

arrays - 将IEnumerable <T>转换为T []的最佳方法

java - 将数据从 iOS 发送到 java 套接字服务器

python - 将二维 python 列表初始化为 [[9]*3]*3 似乎创建了对同一数组的引用。这是怎么回事?

c# - 如何将列表填充为类对象?

Java - ArrayList 构造函数的线程安全

Swift Dictionary 通过下标访问值抛出错误

java - Spring 包含在同一表单中的多个 jsp 在 Ajax 回调上给出错误

java - 使用多线程更新GUI

java - 无法从spring项目连接到mysql数据库

java - 从 Clojure 中的集合( map 列表)中获取偶数/奇数索引元素