LinkedHashMap

一.继承关系

public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
{
继承HashMap的父类,即拥有父类特征,实现Map接口,拥有map接口中的方法实现

二.属性

Entry<K,V> header; //定义可一个entry类型的header属性
boolean accessOrder; //有序性标志: false:插入有序 true:访问有序
Entry<K,V> extends HashMap.Entry<K,V> { //继承HashMap的entry实体
属性有6个
entry {
final K key;
V value;
Entry<K,V> next;
int hash;
Entry<K,V> before;
Entry<K,V> after;
}

三.put添加元素过程
1.首先他的父类HashMap实现put方法:
LinkedHashMap的学习
2.调用他父类的addEntry方法;
父类实现addEntry:
LinkedHashMap的学习
子类 LinkedHashMap实现addEntry:
LinkedHashMap的学习
3.通过源码解读,其元素添加和HashMap的实现是一致的,不同的处理是在数据顺序性处理上
LinkedHashMap的head节点初始化:
header = new Entry<>(-1, null, null, null);
header.before = header.after = header;
在处理过程中,始终获取header节点,
header节点的before节点的after指向当前节点
header节点的before指向当前节点 。如图:
LinkedHashMap的学习
LinkedHashMap的学习
LinkedHashMap的学习
四.其他注意点:
AccessOrder作用方法:插入有序/访问有序的处理

get() 获取元素的方法中有使用
AccessOrder=true时做处理
注意:仅处理before、after的指向流程
对原HashMap的数据+链表的关系没有改变;即数据hash索引位无影响,链表位置无影响

五.方法的使用

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkHashMapGY2 {
    public static void main(String[] args) {
        LinkedHashMap<Integer,String> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put(1,"15");
        linkedHashMap.put(2,"15");
        linkedHashMap.put(3,"15");

        Iterator <Map.Entry<Integer,String>> iterator = linkedHashMap.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer,String> next1 = iterator.next();
            Integer key = next1.getKey();
            String value = next1.getValue();
            System.out.println(key+" = "+value);
        }

        LinkedHashMap<Integer,Integer> link = new LinkedHashMap<Integer,Integer>(16,0.75f,true);
        link.put(1, 1);
        link.put(7, 5);
        link.put(3, 4);
        link.put(5, 7);
        link.put(2, 6);
        link.put(9, 0);

        System.out.println(link);
        link.get(3);
        link.get(2);
        System.out.println("访问后");
        System.out.println(link);

    }
}

输出结果:

C:\java\java7\jdk1.7.0_80\bin\java.exe -javaagent:D:\ideaIU-2018.1.5.win\lib\idea_rt.jar=17051:D:\ideaIU-2018.1.5.win\bin 
1 = 15
2 = 15
3 = 15
{1=1, 7=5, 3=4, 5=7, 2=6, 9=0}
访问后
{1=1, 7=5, 5=7, 9=0, 3=4, 2=6}

Process finished with exit code 0

相关文章:

  • 2021-08-20
  • 2021-07-30
  • 2022-02-10
  • 2021-05-29
  • 2021-05-24
  • 2022-12-23
  • 2021-09-20
  • 2021-09-12
猜你喜欢
  • 2021-11-06
  • 2022-12-23
  • 2022-01-06
  • 2022-02-01
  • 2021-06-06
  • 2022-01-18
相关资源
相似解决方案