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 的基础上,在内部增加了一个链表,用以存放元素的顺序。