【问题标题】:When iterating through a HashMap with Integer keys, will it always return keys in ascending order?当使用 Integer 键迭代 HashMap 时,它是否总是按升序返回键?
【发布时间】:2017-04-03 14:43:25
【问题描述】:

我有一个这样定义的 HashMap:

public Map<Integer, String> staticBlockPositions = new HashMap<Integer, String>();

我通过获取每个键来迭代地图,如下所示:

for (Integer key : blockPositions.keySet()) {
    System.out.println(key);
}

我的问题是,我能否依靠 key 的值始终按升序排列。因此,如果我的 HashMap 看起来像这样:

{
    4: "abc123",
    1: "def456",
    11: "qwe789",
    10: "iop019"
}

(我知道这是 JSON 格式,这只是为了让您了解数据集)。

我的循环会总是输出吗

1
4
10
11

不管我的数据顺序如何?

需要注意的是,添加键的顺序是完全随机的,我无法控制何时添加什么键。

这是一款俄罗斯方块风格的游戏,所以按升序获取按键是必须

【问题讨论】:

  • 你确定Map是你要使用的数据结构吗?
  • 看看TreeMap
  • 有一个非常简单的方法可以找到它。您不需要我们。正在测试中。

标签: java hashmap


【解决方案1】:

引用the Javadoc:

这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

整数键没有特殊情况。你根本不能依赖订单。

如果您希望键按升序排列,请使用SortedMap 的实现,例如TreeMap

【讨论】:

  • TreeMap 是我一直在寻找的。谢谢
  • 虽然您所说的绝对正确,但HashMap<Integer,?> 中的键顺序在有限程度上是可预测的;见stackoverflow.com/a/2144822/139985。 (但在应用程序中尝试依赖这一事实并不明智。)
【解决方案2】:

除了@AndyTurner 所说的HashMap 不保证订单之外,TreeMap 似乎提供了您正在寻找的功能。

【讨论】:

    【解决方案3】:

    不,

    1. 要保持排序顺序,请使用 TreeMap。

    2. 要维护插入顺序,请使用 LinkedHashMap。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2011-03-21
      • 2010-12-02
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多