大家都知道,HashMap
是一个无序的集合,所有存入HashMap的元素都会根据它的key
值对应的hashCode
来映射到一个Entity
数组上,而不是根据存入的顺序进行排列的。
对于一些需要使用排序的情况,HashMap
是无能为力的,为了可以应对这种需要HashMap
并且需要排序的情况,JDK 便推出了LinkedHashMap
。
LinkedHashMap
继承了HashMap
,通过使用一个双向链表来实现。由于是继承了HashMap
,因此对于HashMap
存在的问题,LinkedHashMap
也自然会存在,比如不支持并发。
既然LinkedHashMap
是可以排序的,那么它到底是怎么排序的呢?其实,它有两种排序的方式:
- 根据写入的顺序排序
- 根据读取的顺序排序
根据写入顺序排序,这个很好理解,几乎其他所有的有序集合都是按照这种方式来做的。对于第二种情况,是在每次使用get
方法来访问LinkedHashMap
中的元素时,将该元素放到集合的最后,这样多次操作之后,就会得到一个根据读取的顺序排列的集合了。