gpt4 book ai didi

java - 为什么 CopyOnWriteArrayList 中的 set(int index, E element) 函数如此繁琐?

转载 作者:行者123 更新时间:2023-11-29 04:49:19 25 4
gpt4 key购买 nike

源码在这里:

public E set(int index, E element) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
E oldValue = get(elements, index);

if (oldValue != element) {
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len);
newElements[index] = element;
setArray(newElements);
} else {
// Not quite a no-op; ensures volatile write semantics
setArray(elements);
}
return oldValue;
} finally {
lock.unlock();
}
}

但我认为 if-else block 可以更简洁如下:

if (oldValue != element) {
elements[index] = element;
}

请帮助我,在此先感谢。

最佳答案

正如类名所暗示的,此类执行底层数据结构(即数组)的写时复制。

每当修改数组时,都需要复制一份。如果修改现有数组,迭代等其他函数可能不会按预期运行。

关于java - 为什么 CopyOnWriteArrayList 中的 set(int index, E element) 函数如此繁琐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com