关于java:程序员必须知道的数据结构HashMap-与-LinkedHashMap

5次阅读

共计 895 个字符,预计需要花费 3 分钟才能阅读完成。

为什么要说 HashMap 与 LinkedHashMap?第一:这两种数据结构是 Java Coder 中常常应用的数据结构、第二:这两种构造是最合适的能阐明链表与数组的构造关系。在开始之前首先必须分明一个概念,什么是 hash 值?hash 值是指将一个二进制的值通过 hash 算法将其转换成一个固定长度的二进制的值。

咱们通常应用的 Map 构造是通过什么形式存储数据的?它是通过数组与链表联合的模式来进行数据存储的。在后面大节的阐明中咱们晓得,线性表的查问速度是比拟快的、链表的插入速度是比拟快的。而 Map 就是将两者联合起来,数据结构外围应用数组、外部应用链表的模式来存储数据,通过 hash 值来实现寻址疾速、插入绝对疾速的成果,上面通过图片来看一下 hash 表中常见的数据结构展现 — 拉链法。

这种模式的存储构造就是咱们平时所应用的 HashMap 的数据结构,如图中,0~12 组成一个数组,每个地位中又寄存着一个链表,而链表中的每个数据对象外部又是通过键值对的模式来存放数据元素的。

这张图展现的是 LinkedHashMap 的数据结构图,和 HashMap 不同的是,它的链表外面的数据元素存储是有序的。其中最大的不同就是 LinkedHashMap 是一个双向链表,如果在应用时数据结构比较复杂(比方:一层又蕴含着一层的数据对象)、要求效率比拟高的话,最好应用 LinkedHashMap,能够应用上面代码解决 LinkedHashMap 线程不同步的问题。

Map<String,Object> map = Collections.synchronizedMap(new LinkedHashMap<String,Object>());

同样,HashMap 也是线程不同步的,也能够应用 Collections.synchronizedMap() 办法来使线程平安,在 Jdk1.8 之后减少的 ConcurrentHashMap 实例是线程平安的,如果高版本尽量应用这种形式。

Map<String, Object> map2 = new ConcurrentHashMap<String, Object>();

更多精彩返回微信公众号【老王说编程】>>>

正文完
 0