java集合类部分介绍

ArrayList、LinkedList:实现分别是数组和链表,所以区别就是数组和链表的区别。多搜索用ArrayList,多增删用LinkedList

Vector: 底层也是采用 数组 来存储数据,和 ArrayList 一样(准确说是 ArrayList 与 Vector 一样,毕竟是先有 Vector 后有 ArrayList)。区别是:Vector 是线程安全的,对外提供的读写方法,都是 synchronized 方法,有个别 非 synchronized 方法,其实它内部也是 synchronized 的

CopyOnWriteArrayList:提供一个 线程安全并且 高效的 List。Copy-on-Write,也就是“写时复制”,当有 写类型的操作作用到 CopyOnWriteArrayList 对象的时候,它们都会先获取锁,然后复制一份当前数据作为副本,然后在当前的数据副本上做修改,最后把修改提交,然后释放锁(所以在数据量大且写多读少的时候要谨慎使用CopyOnWriteArrayList)。Array-List,也就是底层是使用数组(顺序表)来进行数据存储,大体实现机制和 ArrayList 差不多

CopyOnWriteArrayList 比 Vector 高效,主要有以下 2 个原因:

    1、Vector 中,读写操作都被加锁了,而 CopyOnWriteArrayList 中,只有写操作才被加锁,而读操作没有进行加锁。这样,当 读 线程数量远大于 写 线程数量的时候,CopyOnWriteArrayList 尤为高效。

    2、Vector 中,使用的是 内置锁(内置锁参考:Java内置锁的简单认识),而 CopyOnWriteArrayList 中,使用的是 jdk 1.5 引入的 ReentrantLock ,相比于 内置锁,ReentrantLock 的性能还是有所提升的。

HashMap、LinkedHashMap、TreeMap:区别类似于 Set,不再多说

HashTable:线程安全。类似于HashMap,但是不允许NULL键和NULL值,比HashMap慢,因为它是同步的。HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占。

ConcurrentHashMap:线程安全,性能更好。允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的Hashtable,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43268461/article/details/100698431