簡體   English   中英

如何通過哈希圖中的哈希碼對隨機值進行排序

[英]how to order random values by hashcode in hashmap

我有一個簡單的類,可以填寫一個簡單的哈希圖,我想通過哈希碼對值進行排序,該怎么做?

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

    public class Ch11Ex18 {
        public static void main(String[] args) {
            Random rand = new Random(47);
            Map<Integer,Integer> m = new HashMap<Integer,Integer>();
            for(int i = 0; i < 10000; i++) {
              // Produce a number between 0 and 20:
              int r = rand.nextInt(20);
              Integer freq = m.get(r);
              m.put(r, freq == null ? 1 : freq + 1);

            }
            System.out.println(m);
          }
    }

您不需要: HashMap本質上是無序的。

您可以將TreeMap與自定義比較器一起使用,但是您應該意識到,如果您使用具有相同哈希碼的不相等對象,則其中只有一個最終會出現在地圖中……即使這樣,也將按鍵排序比值。

您可以創建一個ArrayList<Integer>包含的值的副本, 那種 -但你不會有鑰匙。

您可以創建一個包含條目副本的ArrayList<Map.Entry<Integer, Integer>>並對其進行排序...但是實際上,有什么意義呢?

從根本上講,這是一件奇怪的事情-基本上應該這樣使用哈希碼。 它們不是唯一的,不應將其視為隨機性的來源,等等。無論這里面有什么大圖景,都必然會有更好的方法。

TreeMap按鍵排序。

Map yourMap= new HashMap();
// Enter values
Map sortedMap = new TreeMap(yourMap);

在您的情況下,由於Integer.hashCode()等於實際數字,因此您只需將映射插入TreeMap ,它們就會相應地排序。

HashMap的迭代順序是鍵的哈希碼的自然順序(因為哈希值確定存儲桶,並且存儲桶按順序進行迭代),因此您可以對map.keySet()進行迭代。 對於鍵類型Integer,哈希碼等於Integer的實際值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM