HashMap应该是未分类的,但仍然按键排序

Suj*_*jan 4 java sorting hashmap data-structures

根据这些:

  1. http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html
  2. HashMap,LinkedHashMap和TreeMap之间的区别
  3. java beginner:密钥如何在哈希映射中排序?

HashMapJava应该是未排序的,但它被相对于分类Key.

我认为这是一个问题,因为我需要插入订单数据.所以,我用了LinkedHashMap.但我仍然困惑为什么HashMap排序它.

有人能解释一下吗?

我做了一个简单的例子来查看排序.

public static void main(String[] args) {

        HashMap<Integer, String> newHashMap = new HashMap<Integer, String>();
        newHashMap.put(2, "First");
        newHashMap.put(0, "Second");
        newHashMap.put(3, "Third");
        newHashMap.put(1, "Fourth");

        Iterator<Entry<Integer, String>> iterator = newHashMap.entrySet()
                .iterator();
        while (iterator.hasNext()) {

            Map.Entry<Integer, String> entry = iterator.next();
            System.out.println("Key: " + entry.getKey());
            System.out.println("Value: " + entry.getValue());
            iterator.remove();
        }

    }
Run Code Online (Sandbox Code Playgroud)

结果:

Key: 0
Value: Second
Key: 1
Value: Fourth
Key: 2
Value: First
Key: 3
Value: Third
Run Code Online (Sandbox Code Playgroud)

编辑:

我试图插入使用50支随机数RandomJava,我发现了一些数据未排序.但是,它仍然设法对大多数整数进行排序.

随机结果:

...
Key: 36
Value: random
Key: 43
Value: random
Key: 47
Value: random
Key: 44
Value: random
Key: 45
Value: random
...
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 5

这是巧合(不是真的,而是与散列算法有关).

尝试添加

newHashMap.put(-5, "Fifth");
Run Code Online (Sandbox Code Playgroud)

最后.

输出将是

Key: 0
Value: Second
Key: 1
Value: Fourth
Key: 2
Value: First
Key: 3
Value: Third
Key: -5
Value: Fifth
Run Code Online (Sandbox Code Playgroud)

javadoc特别说

这个类不保证地图的顺序; 特别是,它不保证订单会随着时间的推移保持不变.