当前位置: 首页 > 面试题库 >

HashMap已经按键排序了吗?

孔阳平
2023-03-14
问题内容

我以为HashMap是无序的,并且当遍历键时,您不知道命令的顺序是什么?在此示例中,看起来地图已经按键号排序:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
public static void main(String[] args) {

    String[] words = {"Car", "Cat" ,"Hello", "World", "Hi", "Bye", "Dog", "Be"};

    Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();

    for (String word: words) {
        Integer len = word.length();
        List<String> l = map.get(len);
        if (l == null) { 
            l = new ArrayList<String>();
            l.add(word); 
            map.put(len, (ArrayList<String>) l);
        }
        else {
            if (! l.contains(word)) 
                l.add(word);
        }           
    }

    System.out.println(map);
}
}

输出:

{2=[Hi, Be], 3=[Car, Cat, Bye, Dog], 5=[Hello, World]}

问题答案:

是的,但不能保证维持该顺序。

来自Hashmap文档

此类 无法保证 地图的顺序。特别是,它不能保证顺序 会随着时间的推移保持恒定

您的基准还不足以决定它。

查看TreeMap是否需要排序顺序

根据地图的键的自然顺序或在地图创建时提供的Comparator来对地图进行排序,具体取决于所使用的构造函数



 类似资料:
  • 问题内容: 你好,我需要实现一个接收HashMap并按键对它的值进行排序(mergeSort)的方法 (不使用TreeMap,SortedMap或Collections.Sort或使用JAVA Packages中的任何排序解决方案) 。我的问题是处理通配符类型…这是我的实现(由于使用通配符而返回编译错误) 我感谢您的帮助! 问题答案: 像其他评论者一样,我建议您阅读Java中的泛型主题。您在合并中

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在

  • 考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?

  • 问题内容: 我需要根据存储在其中的值对我进行排序。在包含存储在手机联系人的名字。 另外,我还要求在对值进行排序时对键进行自动排序,否则你可以说键和值绑定在一起,因此值的任何更改都应反映在键中。 要求的输出: 问题答案: 尝试下面的代码对我来说很好。你可以选择升序和降序 编辑:版本2 使用了新的Java功能,例如流for-each等 如果值相同,则地图将按键排序

  • 我有一个<code>HashMap 有没有比排序HashMap更好的解决方案,然后使用 顺便说一句,我一开始并不一定要使用HashMap,但值设置了顺序,我不想交换键和值,因为浮点值可能会改变好几次。

  • 问题内容: 我在Java中具有以下哈希图: 我应该如何对哈希图进行排序,以便考虑字母和数字? 生成的哈希图应如下所示: 感谢帮助! 问题答案: 使用排序: 它将自动放置按键排序的条目。我认为自然排序适合你的情况。 注意,由于查找优化,不会保留顺序。