没有提供CopyOnWriteLinkedList是因为linkedlist的数据结构关系分散到每一个节点里面,对每一个节点的修改都存在竟态条件,需要同步才能保证一致性。arraylist就不一样,数组天然的拥有前驱后继的结构关系,对列表的增删,因为是copy on wirte,所以只需要cas操作数组对象就能够保证线程安全,效率上也能接受,更重要的是避免锁竞争带来的上下文切换消耗。有一点需要注意的是CopyOnWriteArrayList在使用上有数据不完整的时间窗口,要不要考虑需要根据具体场景定夺
很多童鞋提到了链表copy的代价,个人觉得这并不是最根本的原因。首先数组无论的新增还是删除copy是避免不了的,因此我们采用copy on write的方式在保证代价相当的前提下保证了并发的安全问题,何乐而不为呢。其次是链表的新增删除压根就不需要复制,就算是在并发场景下采用锁的方式性能损耗都不大,因此也就没必要采用copy的方式了,更何况链表的操作可以采用分段锁、节点锁。所以没有CopyOnWriteLinkedList的主要原因是没有这个必要。