【问题标题】:How to get the first key of a hashmap?如何获取哈希图的第一个键?
【发布时间】:2016-06-10 01:48:18
【问题描述】:

我有以下HashMap<String, Double> map = new HashMap<String, Double>();

我怎样才能得到第一个密钥而不像这样迭代它:

Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
    it.remove(); 
}

谢谢

【问题讨论】:

  • 什么是the first key?最小的一个?你插入的第一个?迭代键集时得到的第一个?

标签: java hashmap


【解决方案1】:
Map<String, Double> map=new HashMap<>();
Map.Entry<String, Double> entry=map.entrySet().iterator().next();
 String key= entry.getKey();

但是 HashMap 不维护插入顺序。您可以使用 LinkedHashMap 代替 HashMap。

【讨论】:

    【解决方案2】:

    如果您使用 Java 8,

    map.entrySet().stream().findFirst().get().getKey()
    

    【讨论】:

      【解决方案3】:

      要获取“第一个”键的值,可以使用它

      map.get(map.keySet().toArray()[0]);
      

      在 Java8 中,

      您可以使用流。对于 TreeMap/LinkedHashMap,排序很重要,你可以写

      map.entrySet().stream().findFirst();
      

      对于HashMap,没有顺序,所以findAny()在不同的调用中可能会返回不同的结果

      map.entrySet().stream().findAny();
      

      【讨论】:

        【解决方案4】:

        由于您的问题对于您认为的“第一把钥匙”不是很具体,我将仅列出几个选项。

        只是键集中的第一个

        String firstKey = map.keySet().iterator().next();
        

        但不知道为您提供了哪些信息。

        最小的键

        String firstKey = map.keySet().stream().min(String::compareTo).get();
        

        最小值的键

        String firstKey = map.entrySet().stream().min((a,b) -> a.getValue().compareTo(b.getValue())).get().getKey();
        

        第一个插入的键

        这不适用于常规HashMap,因为它不保留顺序。请改用LinkedHashMap

        Map<String, Double> map = new LinkedHashMap<>();
        String firstKey = map.keySet().iterator().next();
        

        【讨论】:

          【解决方案5】:

          尝试使用LinkedHashMap代替HashMap,它在调用keySet()时保持插入顺序。

          LinkedHashMap

          【讨论】:

            【解决方案6】:

            如果您想遍历Map 并希望按照插入条目的顺序对其进行遍历,您应该使用LinkedHashMap 而不是HashMap

            这是假设“第一个键”是指您插入的第一个键。然后您可以按照插入条目的顺序对其进行迭代,或者如果您只想要您所说的第一个键,您可以调用map.keySet().toArray()[0]

            【讨论】:

              【解决方案7】:

              只需调用一次it.next(),确保迭代器正好在第一个位置。

              Iterator it = map.entrySet().iterator();
              Map.Entry firstEntry = (Map.Entry)it.next();
              

              【讨论】:

                猜你喜欢
                • 2012-09-01
                • 1970-01-01
                • 2012-10-04
                • 2014-01-30
                • 2021-10-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-30
                相关资源
                最近更新 更多