基础知识列表

HashMap、HashTable、ConcurentHashM

2018-04-20  本文已影响4人  chrisdd

一、Vector、LinkedList、ArrayList

  1. VectorArrayList是使用数组实现的,LinkedList是使用链表实现的

2)Vector是线程安全的,LinkedListArrayList不是线程安全的

如果涉及到多线程,那么就选择Vector,如果不涉及到多线程就从LinkedListArrayList中选。 LinkedList更适合从中间插入或者删除(链表的特性)。 ArrayList更适合检索和在末尾插入或删除(数组的特性)。

PS: Collections.synchronizedList(List list)方法也可以用来返回一个线程安全的List。参见SynchronizedList和Vector的区别

二、HashMap、HashTable、ConcurentHashMap

  1. HashMapHashTable都实现了Map接口,ConcurrentHashMap实现了ConcurrentMap接口

  2. HashMapConcurrentHashMap 都继承了AbstractMap类,HashTable继承了Dictionary

3)HashTableConcurrentHashMap是线程安全的,HashMap不是线程安全的。

  1. 当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。

  2. ConcurrentHashMap使用锁分段技术,将数据分成一段一段的存储,给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。

如果不涉及到多线程处理的情况,就是用hashMap,因为他的效率比较高。在有并发请求的场景中,如果数据的强一致性比较重要,那么就请使用hashTable,因为ConcurrentHashMap的get,clear,iterator 都是弱一致性的。如果效率要求比较高,那么就使用ConcurrentHashMap,因为他不会像hashTable那样产生阻塞。


(转)http://www.hollischuang.com

上一篇 下一篇

猜你喜欢

热点阅读