You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
1.2 KiB

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