在Java 7 Java 8中,HashMap.KeySet()以不同的顺序返回键


public class TestClass {    
    public static void main(String[] args)
    {
        HashMap<String,Integer> testMap = new HashMap<String,Integer>();
        testMap.put("Key1", 1);
        testMap.put("Key2", 2);
        testMap.put("Key3", 3);
        testMap.put("Key4", 4);
        testMap.put("Key5", 5);
        //[Key2, Key1, Key4, Key3, Key5] //java7
        //[Key2, Key1, Key5, Key4, Key3] //java8
        System.out.println(testMap.keySet().toString());
    }
}

为什么钥匙的顺序不同?

为什么钥匙的顺序不同?

因为:

  1. Java规范(即javadocs(没有指定HashMap的密钥集和的顺序

  2. 在Java 7和Java 8之间,HashMap的实现发生了重大变化。

这些实现更改(带来了显著的性能改进(导致密钥集的顺序发生了更改。

但这并不被视为"突破性"更改,因为密钥集顺序始终被明确标记为未指定。。。。这意味着你不应该依赖它。

不能保证按照规范进行订购。单个VM可以自由实现他们选择的任何东西。

Hashmap不维护顺序,如果您想要有序插入,可以使用linkedhashmap:(

Map接口的基于哈希表的实现。此实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,只是它不同步并且允许null。(这个类对映射的顺序没有任何保证;特别是,它不能保证订单在一段时间内保持不变。

最新更新