没啥读到的见解,这个文章纯粹是学习Hash的时候的笔记罢了!!!
之前一直觉得既然HashMap能用为啥还要出现HashTable,TreeMap,ConcurrentHashMap等等这些链表来存储数据。
hashMap 写入慢,读取快。因为hashMap全程在写入的时候要考虑到值是否存在 还要涉及到table扩容,所以写入的时候由于步骤相对较多,导入写入较慢,
但读取的时候只需要根据key来查找就好,所以读取非常块。但是因为hashMap的方法都没有考虑线程安全 这也是他的有点,由于不需要考虑线程 所以就不
要加入锁机制。没有等待,所以在单线程中hashMap的读取是很快的。但也是缺点,由于没有考虑并发,所以当同时对hashMap写入的时候,且需要扩容链表的时候就会出现并发。是个头疼的问题。
ConcurrentHashMap 不但读取块,而且还能保证线程安全,很厉害啊。因为concurrentHashMap中用到了大量的线程安全关键字 而且还继承了ReentrantLock类,
重点是基于线程安全的情况下也能做到读取的速度非常快,是因为concurrentHashMap中采用Segment(段)的技术,每个segment都有自己对应的锁 而concurrentHashMap
中的segment是个数组,每个segment都是一个链表,当针对一个segment操作时 是不影响其他的segment操作的,而且每个segment都有自己的锁。所以在一个segment内
操作可以保证线程安全,而且由于segment是个数组,可以同时并行的操作多个segment内的数据 这点又保证了读取的数度不会因为线程安全的原因影响了!!!!