HashMap,,ConcurrentHashMap------------------淺談!!
沒啥讀到的簡介,這個文章純粹是學習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內的數據 這點又保證了讀取的數度不會因為線程安全的原因影響了!!!!
HashMap,,ConcurrentHashMap------------------淺談!!