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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

只要不涉及线程安全问题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相当于前后指针