侧边栏壁纸
  • 累计撰写 106 篇文章
  • 累计创建 19 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

LinkedHashMap和HashMap的区别以及使用方法

zero
2022-05-14 / 0 评论 / 0 点赞 / 19 阅读 / 2143 字
温馨提示:
本文最后更新于 2024-07-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LinkedHashMap和HashMap的区别

  • LinkedHashMap是一个具有双重链表的HashMap,而HashMap只是数组+单个链表+红黑树(JDK1.8)

  • LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的

LinkedHashMap支持两种排序算法

  • 插入排序 : 顾名思义,按照插入顺序排序

  • 使用排序 : 则是把最近使用的移至尾部(例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了)

简单应用场景

如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap来包装一下,从而实现同步。其实现一般为:

 Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

示例

import Java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map; 
public class TestLinkedHashMap {
  public static void main(String args[])
  {
   System.out.println("*************************LinkedHashMap*************");
   Map<Integer,String> map = new LinkedHashMap<Integer,String>();
   map.put(6, "apple");
   map.put(3, "banana");
   map.put(2,"pear");

   for (Iterator it =  map.keySet().iterator();it.hasNext();)
   {
    Object key = it.next();
    System.out.println( key+"="+ map.get(key));
   }

   System.out.println("*************************HashMap*************");
   Map<Integer,String> map1 = new  HashMap<Integer,String>();
   map1.put(6, "apple");
   map1.put(3, "banana");
   map1.put(2,"pear");

   for (Iterator it =  map1.keySet().iterator();it.hasNext();)
   {
    Object key = it.next();
    System.out.println( key+"="+ map1.get(key));
   }
  }
}
运行结果如下:
*************************LinkedHashMap*************
6=apple
3=banana
2=pear
*************************HashMap**************************
2=pear
6=apple
3=banana
分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化。

0

评论区