当使用Integer键迭代HashMap时,它是否总是按升序返回键?

时间:2017-04-03 14:43:25

标签: java hashmap

我有一个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

无论我的数据顺序如何?

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

这适用于俄罗斯方块风格的游戏,因此按升序排列按键是必须

3 个答案:

答案 0 :(得分:8)

引用the Javadoc

  

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

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

如果您希望密钥按升序排列,请使用SortedMap的实施,例如TreeMap

答案 1 :(得分:0)

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

答案 2 :(得分:0)

不,

  1. 要维护排序顺序,请使用TreeMap。

  2. 要维护广告订单,请使用LinkedHashMap。