一、前言
HashMap存在着一个问题,那就是它的迭代顺序不是它的存储顺序,即HashMap中的元素是无序的。但是有些场景下,我们需要使用一个有序的map。这种情况下,我们就可以使用LinkedHashMap,它虽然增加了时间可空间上的开销,但是通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素的迭代顺序。
二、属性
2.1 Entry
可以看出在LinkedHashMap中增加了before和after用于维护双向链表。
/**
* HashMap.Node subclass for normal LinkedHashMap entries.
*/
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}
参考