Java 当我打印地图数据时,我总是按顺序排序为什么?

Java 当我打印地图数据时,我总是按顺序排序为什么?,java,dictionary,collections,Java,Dictionary,Collections,这是我试图打印地图的代码 package beginnersbook.list.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public class MapExample1 { public static void main(String[] args) { HashMap<Integer

这是我试图打印地图的代码

package beginnersbook.list.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class MapExample1 {

    public static void main(String[] args) {

        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();

        hashMap.put(2, "Jagannath");
        hashMap.put(1, "Somonath");
        hashMap.put(3, "Kedarnath");

        Set<Entry<Integer, String>> set = hashMap.entrySet();

        Iterator<Entry<Integer, String>> iterator = set.iterator();

        //Using while loop
        System.out.println("Using while loop");
        while(iterator.hasNext()){
            Entry<Integer, String> mEntry = (Entry<Integer, String>) iterator.next(); 
            System.out.println("Key : "+mEntry.getKey()+" - Value : "+mEntry.getValue());
        }

        //for loop
        System.out.println("Using Advanced for loop");

        for(Entry<Integer, String> entry : hashMap.entrySet()){
            System.out.println("Key : "+entry.getKey()+" - Value : "+entry.getValue());
        }

    }

 }
包初学者book.list.map;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map.Entry;
导入java.util.Set;
公共类映射示例1{
公共静态void main(字符串[]args){
HashMap HashMap=新的HashMap();
hashMap.put(2,“Jagannath”);
hashMap.put(1,“Somonath”);
hashMap.put(3,“Kedarnath”);
Set=hashMap.entrySet();
迭代器迭代器=set.Iterator();
//使用while循环
System.out.println(“使用while循环”);
while(iterator.hasNext()){
Entry mEntry=(Entry)迭代器.next();
System.out.println(“Key:+mEntry.getKey()+”-Value:+mEntry.getValue());
}
//for循环
System.out.println(“使用高级for循环”);
for(条目:hashMap.entrySet()){
System.out.println(“Key:+entry.getKey()+”-Value:+entry.getValue());
}
}
}

这是我的密码。我认为当一张地图被打印时,它每次都以不同的顺序打印,但是我总是以排序的顺序获取内容。

HashMap在内部使用哈希算法

它不能维持秩序


若要保持插入顺序,请使用
LinkedHashMap

在“未指定”和“随机”之间有很大的区别。HashMap的顺序是未指定的,但不是随机的

如果在HashMap中以相同的顺序输入相同的键,那么每次都会得到相同的结果。这(非常)大致类似于如果从同一种子开始,伪随机数生成器每次将生成相同的序列

在这种情况下,正如三十二上校在评论中指出的那样,顺序恰好与钥匙的自然顺序相同。对于三个键值对,有6种可能的排序(集合
{1,2,3}
的排列),因此有大约17%的可能性会发生这种情况——这一点不太可能


“未指定”的含义本质上是“我们可以做我们想做的任何事情”。它让实现者可以自由地执行他们想要的任何哈希算法,以任何方便的方式解决冲突,调整哈希映射的存储桶大小,而不考虑维护顺序,等等。如果他们愿意,他们可以明确增加随机化,并且仍然在规范范围内;但是他们没有,因为没有必要。因此,代码本身是确定性的,这意味着给定相同的输入(例如,要插入的键值对列表),它将始终生成相同的输出(其
toString
每次看起来都相同的映射)。

哈希集中元素的遍历顺序没有指定。它现在被排序的事实是巧合(这对于一个3元素集来说并不难)。尝试使用更多/不同的元素。如何“排序”?如果
HashMap
按数据的放置顺序返回数据,则表示您很幸运,或者输入的条目太少。但是,
HashMap
不执行任何键排序。请尝试添加一个映射到键
-1
的值。java.util.HashMap始终是无序的,除此之外,您不应假定任何其他内容。