我已经看到了涉及该主题的答案,但我想查找是否有人从哈希映射派生的键集和值列表中的键和值的顺序不同。我知道条目本身在哈希图中可能具有不确定的顺序,但是键和值的列表相对于彼此是否会乱序?

这是一个简短的说明片段:

public class App {
    public static void main(String[] args) {
        Map<String,String> stateCapitols = new HashMap<>();
        stateCapitols.put("AL", "Montgomery");
        stateCapitols.put("AK", "Juneau");
        stateCapitols.put("CO", "Denver");
        stateCapitols.put("FL", "Tallahassee");
        stateCapitols.put("Indiana", "Indianapolis");

        stateCapitols.keySet().stream().forEach(System.out::println);
        System.out.println();
        stateCapitols.values().stream().forEach(System.out::println);
    }
}

在上面的示例中,AL是否可以与Denver(或任何其他值)出现在同一位置?

最佳答案

让我们再次查看有关 Map 合同中的迭代顺序的Java SE API语言:

一些地图实现(例如TreeMap类)对其顺序做出特定的保证。其他的(例如HashMap类)则没有。

HashMap :

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

由于已明确声明HashMap迭代器没有顺序,因此即使在调用相同方法之间也不能假设迭代是稳定的,更不用说在不同方法keySet()values()的调用之间了。

有用的是,Map具有一种 entrySet() 方法,它可以完全满足您的需要:它以配对键和值的方式遍历地图内容。这种方法可在您需要依赖该对的两个部分时使用。

随着Java许可更改的生效,那些认为自己可能一直使用Oracle Java实现的人员和组织现在正在寻找替代实现。依靠单个实现的未写细节是极其危险的,与甲骨文的许可和定价变更之前相比,现在更加危险。

09-26 20:18