只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是**迭代HashMap的顺序并不是HashMap放置的顺序**,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map。 这个时候,LinkedHashMap就闪亮登场了,它虽然增加了时间和空间上的开销,但是**通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素迭代的顺序**。**该迭代顺序可以是插入顺序或者是访问顺序。** LinkedHashMap可以认为是**HashMap+LinkedList**,即它既使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。 看一下LinkedHashMap的基本数据结构,也就是Entry: ```java private static class Entry extends HashMap.Entry { // These fields comprise the doubly linked list used for iteration. Entry before, after; Entry(int hash, K key, V value, HashMap.Entry next) { super(hash, key, value, next); } ... } ``` 列一下Entry里面有的一些属性吧: 1、K key 2、V value 3、Entry next 4、int hash 5、Entry before 6、Entry after 其中5、6相当于前后指针