【Java基础】Map遍历元素按put顺序输出(不同Map区别)

【Java基础】Map遍历元素按put顺序输出(不同Map区别),第1张

直接上代码:

//无序
Map hashMap = new HashMap<>();
//有序
Map linkedHashMap = new LinkedHashMap<>();

for (Map.Entry<String,Object> entry : linkedHashMap.entrySet()) {
    System.out.println("Key= " + entry.getKey() + "\t" + "Value = " + entry.getValue());
}

LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。
在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。若希望有顺序地去存储key-value时,就需要使用LinkedHashMap。

HashMap
最常用的Map,根据键的HashCode值存储数据,可以根据键直接获取它的值,具有很快的访问速度,遍历时候的顺序是完全随机的。HashMap只允许一个键为Null,允许多个值为Null。

特性: 完全随机
优点: 随机访问,取值速度快
缺点:多个线程同时写HashMap可能导致数据不一致,若需同步,使用Collection的synchronizedMap方法或者使用ConcurrentHashMap

LinkedHashMap
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,与HashMap的随机遍历不同,在用Iterator遍历的时候,先得到的记录肯定是先插入的,类似于python中的OrderedDict。遍历速度会比HashMap慢,不过有一种情况例外: 当HashMap的容量很大,实际数据很少时 , 因为HashMap的遍历速度和它的容量有关,而LinkedHashMap只跟实际数据量有关。

TreeMap
TreeMap实现SortMap接口,能够将它保存的记录按键排序,默认是按键的升序排列,也可以指定排序的比较器,遍历TreeMap的时候,得到的记录是按照键排过序的。

结论:
用的最多:HashMap
按自然顺序或自定义顺序遍历键:TreeMap
需输出的顺序和输入的相同,按读取顺序来排列:LinkedHashMap

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/918576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存