一天一个java知识(深入理解map)

也许你对这样一行代码不陌生:
Map<K, V> map = new HashMap<K, V>()
但是你了解java map吗?
一天一个java知识(深入理解map)
这是一张java集合图,里面包含了所有常见的集合其中Map:
Map是一种从键映射到值的结构,存储键值对,其中key都是唯一的不允许重复,而值可以重复。实现Map的子类有很多:HashMapTreeMapLinkedMap等。虽然实现了相同的接口,但是执行效率并不完全相同。HashMap基于散列表实现,采用对象的hashCode进行快速查询;LinkedMap采用列表来维护内部顺序;TreeMap通过红黑树的数据结构来实现的,内部元素按需排列。

  1. HashMap
    HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有较快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复的原因,HashMap最多只允许一条记录的键为Null
    在添加时,先hash到指定的地方,然后将next设置为原来的实体类(entity)查找时,也是先找到制定的下标的元素。然后遍历整个链表。查找到equals相等的那个元素HashMap非线程安全
    一天一个java知识(深入理解map)
  2. Hashtable
      Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。Hashtable线程安全
      一天一个java知识(深入理解map)
  3. LinkedHashMap
      LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。
    TreeMap
    一天一个java知识(深入理解map)
  4. TreeMap
    基于红黑二叉树实现,线程非安全,不允许键对象是null,key不可以重
    复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,默认升序,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出。
    一天一个java知识(深入理解map)