hashMap 笔记笔记笔记

  1. HashMapMap基于散列表的实现(它取代了Hashtable)。插入和查询键值对的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。
  2. LinkedHashMap:类似于HashMap,但是迭代遍历它时,取得键值对的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为它使用链表维护内部次序。
  3. TreeMap:基于红黑树的实现。查看键值树时,它们会被排序(次序由ComparableComparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
  4. ConcurrentHashMap:一种线程安全的Map

 

http://blog.csdn.net/xin_jmail/article/details/24431835

 

hashtablehashmapConcurrentHashMaptreemap的区别

 

 

如果键被用于HashMap, 那么它必须还具有恰当的hashCode()方法和equal() 方法。 如果键被用于TreeMap, 那么它必须实现Comparable

 

 

Object.equals() 只是比较对象的地址, object.hashCode() 默认是使用对象的地址计算散列码。

 

 

synchronized 是java为防止资源冲突提供的内置支持。当任务要执行被synchronized关键字保护的代码片段时, 它将检查锁是否可用,然后获取锁,执行代码,释放锁。

使用synchronized时候,如果程序运行出错,就会抛出异常,但是不会去做清理工作。使用ReentrantLock允许你尝试着获取但最终未获取的锁,这样如果其他人已经获得这个锁,那你就可以离开去执行别的事情,而不是等待直到这个锁被释放。

 

ConcurrentHashMapJava 5中支持高并发、高吞吐量的线程安全HashMap实现。

实现原理 

 

锁分离 (Lock Stripping)

 

ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。

 

 

http://alex09.iteye.com/blog/539545

 

http://www.iteye.com/topic/344876

 

 

关于Hash表的基础数据结构,这里不想做过多的探讨。Hash表的一个很重要方面就是如何解决hash冲突,ConcurrentHashMapHashMap使用相同的方式,都是将hash值相同的节点放在一个hash链中。与HashMap不同的是,ConcurrentHashMap使用多个子Hash表,也就是段(Segment)

猜你喜欢

转载自arual.iteye.com/blog/2223919