在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]

Posted

技术标签:

【中文标题】在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]【英文标题】:How to make sure the key's order can not be changed when traversing a HashMap in Java? [duplicate] 【发布时间】:2015-10-27 23:12:40 【问题描述】:

例如,我输入 3 个字符串:Hagzou Hugzou Jigxng 作为 HashMap 的键,

但是当我按键遍历HashMap时,顺序发生了变化:Hugzou Hagzou Jigxng。

是否可以确保在输出键时不能更改顺序?

像这样:

输入:Hagzou Hugzou Jigxng ###

输出:Hagzou Hugzou Jigxng

非常感谢!

这是我的代码:

    HashMap< String, Integer > distance = new HashMap< String, Integer >(); 
    Scanner input = new Scanner(System.in);     
    while (true) 
        String city = input.next();
        if (city.equals("###"))
            break;
        distance.put(city, null);
    
    for (String city : distance.keySet()) 
        System.out.println(city);
    

【问题讨论】:

使用LinkedHashMasp 【参考方案1】:

你可以使用LinkedHashMap

Map接口的哈希表和链表实现,带有 可预测的迭代顺序。此实现不同于 HashMap 因为它维护一个双向链表,贯穿其所有 条目。这个链表定义了迭代顺序,即 通常是键插入地图的顺序 (插入顺序)。请注意,如果键不影响插入顺序 被重新插入到地图中。 (如果键 k 被重新插入到映射 m 中,则 当 m.containsKey(k) 返回 true 时调用 m.put(k, v) 在调用之前。)

换句话说 - 虽然LinkedHashMap 有一种通过哈希码访问条目的方法,就像常规的HashMap 一样,它也维护一个双向链表并维护项目插入的顺序。这样,当您使用它的迭代器时,您将按照插入它们的顺序获取项目。

【讨论】:

以上是关于在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java——HashMap底层源码分析

Java8系列重新认识HashMap

Java中关于HashMap的元素遍历的顺序问题

Java中HashMap和LinkedHashMap以及TreeMap的区别

如何在 HashMap 中保留插入顺序? [复制]

Java8系列之重新认识HashMap