Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
KeySet()在Java7和Java8中以不同的顺序返回键 公共类TestClass{ 公共静态void main(字符串[]args) { HashMap testMap=新的HashMap(); testMap.put(“键1”,1); testMap.put(“键2”,2); testMap.put(“键3”,3); testMap.put(“键4”,4); testMap.put(“键5”,5); //[Key2,Key1,Key4,Key3,Key5]//java7 //[Key2,Key1,Key5,Key4,Key3]//java8 System.out.println(testMap.keySet().toString()); } }_Java - Fatal编程技术网

KeySet()在Java7和Java8中以不同的顺序返回键 公共类TestClass{ 公共静态void main(字符串[]args) { HashMap testMap=新的HashMap(); testMap.put(“键1”,1); testMap.put(“键2”,2); testMap.put(“键3”,3); testMap.put(“键4”,4); testMap.put(“键5”,5); //[Key2,Key1,Key4,Key3,Key5]//java7 //[Key2,Key1,Key5,Key4,Key3]//java8 System.out.println(testMap.keySet().toString()); } }

KeySet()在Java7和Java8中以不同的顺序返回键 公共类TestClass{ 公共静态void main(字符串[]args) { HashMap testMap=新的HashMap(); testMap.put(“键1”,1); testMap.put(“键2”,2); testMap.put(“键3”,3); testMap.put(“键4”,4); testMap.put(“键5”,5); //[Key2,Key1,Key4,Key3,Key5]//java7 //[Key2,Key1,Key5,Key4,Key3]//java8 System.out.println(testMap.keySet().toString()); } },java,Java,为什么键的顺序不同?不保证按照规范进行排序。各个虚拟机可以自由实现他们选择的任何功能 Hashmap不维护顺序,如果希望有序插入,可以使用linkedhashmap:) 为什么钥匙的顺序不同 因为: Java规范(即javadocs)没有指定HashMap键集的顺序,并且 Java7和Java8之间的HashMap实现发生了重大变化 这些实现更改(显著提高了性能)导致了键集更改的顺序 但这并不被视为“中断”更改,因为键集顺序一直被明确指出为未指定。。。。这意味着您不应该依赖它。基于哈希表的映射接

为什么键的顺序不同?

不保证按照规范进行排序。各个虚拟机可以自由实现他们选择的任何功能

Hashmap不维护顺序,如果希望有序插入,可以使用linkedhashmap:)

为什么钥匙的顺序不同

因为:

  • Java规范(即javadocs)没有指定HashMap键集的顺序,并且

  • Java7和Java8之间的HashMap实现发生了重大变化

  • 这些实现更改(显著提高了性能)导致了键集更改的顺序


    但这并不被视为“中断”更改,因为键集顺序一直被明确指出为未指定。。。。这意味着您不应该依赖它。

    基于哈希表的映射接口实现。这个实现提供了所有可选的映射操作,并允许空值和空键。(HashMap类大致相当于Hashtable,只是它不同步并且允许空值。)该类不保证映射的顺序;特别是,它不能保证顺序随时间保持不变。

    实际上,集合中元素(如键集)的顺序是未定义的,可以是任何东西。如果您需要特定的订单,请使用SortedMap或在使用前对钥匙进行排序。Java版本的变化可能会导致使用不同大小的数组来保存HashMap中的值(只是一个猜测)。集合是无序的—运行程序和获取密钥集的次数—大多数情况下,您会发现不同。所以java 7或java 8键集代码没有区别。@Imran-实际上,这对于该程序是不正确的。对于任何给定的Java平台,该程序将始终按照所说的顺序返回密钥。为什么?因为指定了给定
    字符串的hashcode值,并且HashMap的行为是确定的。如果需要在插入密钥时对其进行排序,请使用
    LinkedHashMap
    。@JFMeier如果有价值,最好将其转换为答案。实际上,集合是用Java编写的,因此VM与集合元素顺序无关。主要更改与…?@AndrewsBAnthony有关。数据的存储方式不同,因此迭代方式也不同。您必须阅读并比较源代码,以找到可能影响订单的每个更改。与性能相关。。。。就像我说的。事实上,其中一件事是超过一定长度的散列链可能会转换为二叉树。有关详细信息,请参阅Java8源代码。
    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());
        }
    
    }