[英]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.