Java集合—Map集合

时间:2023-02-26 00:14:31

Map集合

  Map集合 

    |--HashMap

      底层是哈希表结构

                      无序

      键和值可以null(注意:最多只允许一条记录的键为null,不允许多条记录的值为null

      线程不安全,效率

          |--LinkedHashMap

            底层是链表哈希表

            有序 (根据元素增加或者访问的先后顺序进行排序)

                                             线程不安全

    |--Hashtable

      底层是哈希表结构

      键和值可以null。

                      无序

      线程安全,效率

    |--TreeMap

        底层是二叉树

       有序  (根据元素的 Key 进行排序,基于元素的固有顺序)

                     线程不安全




平常用的多的是HashMap和LinkedHashMap

    HashMap 是将 Key 做 Hash 算法,然后将 Hash 值映射到内存地址,直接取得 Key 所对应的数据。

    在 HashMap 中,底层数据结构使用的是数组,所谓的内存地址即数组的下标索引。

    HashMap 的高性能需要保证以下几点:

           1.Hash 算法必须是高效的;

           2.Hash 值到内存地址(数组索引)的算法是快速的;

           3.根据内存地址(数组索引)可以直接取得对应的值。

    HashMap 实际上是一个链表的数组。基于 HashMap 的链表方式实现机制,只要 HashCode()和 Hash()方法实现得足够好,能够尽可能地减少冲突的产生,那么对 HashMap 的操作几乎等价于对数组的随机访问操作,具有很好的性能。但是,如果 HashCode()或者 Hash()方法实现较差,在大量冲突产生的情况下,HashMap 事实上就退化为几个链表,对 HashMap 的操作等价于遍历链表,此时性能很差。

    HashMap 的一个功能缺点是它的无序性,被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。如果希望元素保持输入的顺序,可以使用 LinkedHashMap 替代。


    LinkedHashMap

            继承自 HashMap,具有高效性。

            有序性:在 HashMap 的基础上,在内部增加了一个链表,用以存放元素的顺序。