LinkedHashMap用法
2019-11-13 本文已影响0人
endlesswork
LinkedHashMap继承于HashMap,保证key有序。在LinkedHashMap支持2种排序,插入排序和访问排序,这里我们先看下插入排序,插入排序顾名思义就是根据我们put的前后顺序进行排序。
public class LinkedHashMapDemo {
public static void main(String []args){
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap(4);
linkedHashMap.put("ef","1");
linkedHashMap.put("de","2");
linkedHashMap.put("ww","3");
linkedHashMap.put("te","4");
HashMap<String,String> hashMap = new HashMap(4);
hashMap.put("ef","1");
hashMap.put("de","2");
hashMap.put("ww","3");
hashMap.put("te","4");
System.out.println("LinkedHashMap开始");
for(Map.Entry<String, String> entry: linkedHashMap.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
System.out.println("HashMap开始");
for(Map.Entry<String, String> entry: hashMap.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
}
}
结果如下,HashMap的展示结果可能有差异,因为每台电脑计算出来hashcode值可能不一样
LinkedHashMap开始
Key: ef Value: 1
Key: de Value: 2
Key: ww Value: 3
Key: te Value: 4
HashMap开始
Key: ww Value: 3
Key: ef Value: 1
Key: de Value: 2
Key: te Value: 4
接下来 我们再看下访问排序
public class LinkedHashMapDemo2 {
public static void main(String []args){
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap(8);
linkedHashMap.put("ef","1");
linkedHashMap.put("de","2");
linkedHashMap.put("ww","3");
linkedHashMap.put("te","4");
//我们对于ww重新塞入
linkedHashMap.put("ww","33");
System.out.println("LinkedHashMap插入排序重新赋值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
//我们添新值
linkedHashMap.put("jl","5");
System.out.println("LinkedHashMap插入排序添加新值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
//我们获取值
linkedHashMap.get("de");
System.out.println("LinkedHashMap插入排序获取值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
LinkedHashMap<String,String> linkedHashMap1 = new LinkedHashMap(8, 0.75f ,true);
linkedHashMap1.put("ef","1");
linkedHashMap1.put("de","2");
linkedHashMap1.put("ww","3");
linkedHashMap1.put("te","4");
//我们对于ww重新塞入
linkedHashMap1.put("ww","33");
System.out.println("LinkedHashMap访问排序重新赋值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap1.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
//我们添新值
linkedHashMap1.put("jl","5");
System.out.println("LinkedHashMap访问排序添加新值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap1.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
//我们获取值
linkedHashMap1.get("de");
System.out.println("LinkedHashMap访问排序获取值测试开始");
for(Map.Entry<String, String> entry: linkedHashMap1.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
}
}
结果如下,可以看到插入排序无论我们修改还是添加新值,都是按照我们插入的顺序,但是在访问排序中,一旦我们修改或者新增的、获取的,都会跑到最末尾
LinkedHashMap插入排序重新赋值测试开始
Key: ef Value: 1
Key: de Value: 2
Key: ww Value: 33
Key: te Value: 4
LinkedHashMap插入排序添加新值测试开始
Key: ef Value: 1
Key: de Value: 2
Key: ww Value: 33
Key: te Value: 4
Key: jl Value: 5
LinkedHashMap插入排序获取值测试开始
Key: ef Value: 1
Key: de Value: 2
Key: ww Value: 33
Key: te Value: 4
Key: jl Value: 5
LinkedHashMap访问排序重新赋值测试开始
Key: ef Value: 1
Key: de Value: 2
Key: te Value: 4
Key: ww Value: 33
LinkedHashMap访问排序添加新值测试开始
Key: ef Value: 1
Key: de Value: 2
Key: te Value: 4
Key: ww Value: 33
Key: jl Value: 5
LinkedHashMap访问排序获取值测试开始
Key: ef Value: 1
Key: te Value: 4
Key: ww Value: 33
Key: jl Value: 5
Key: de Value: 2