Java HashMap VS LinkHashMap

最新在梳理Java,顺便分享记录下,供大家参考。从以下几个地方对比阐述两个类的异同。

存储结构

HashMap


Java HashMap VS LinkHashMap_第1张图片
HashTable

说明:table 是一个entery列表,其中第i的位置存储所有hash之后index为i的entry,相同index的entr用链表存储。

LinkHashMap

Java HashMap VS LinkHashMap_第2张图片
LinkHashMap

相对HashMap,LinkHashMap多了一个双向队列,新添加entry首先按照HashMap的方式存储在table中,同时会将entry加入队列的队尾。

遍历方式

HashMap

Java HashMap VS LinkHashMap_第3张图片
HashMap遍历方式

由以上代码可以看出HashMap是一个“深度优先”的遍历方式,按照index顺序,优先遍历每个index对应的entry链。那么我们很容易得出,entry遍历输出的顺序不是存储的顺序。

LinkHashMap


Java HashMap VS LinkHashMap_第4张图片
LinkHashMap遍历方式

LinkHashMap遍历方式是按照双向队列的顺序遍历整个entry链。由此可见entry遍历的顺序是存储的顺序。

总结一下:

1. LinkHashMap 比 HashMap多一个双向队列,用于存储遍历。

2. Hash输出是无序的,LinkHashMap输出则是有序的。

你可能感兴趣的:(Java HashMap VS LinkHashMap)