2014-09-01 66 views
1

我今天正在測試一些文件/配置文件轉移的東西。我用一個HashMap來存儲玩家的名字和那裏的個人資料的價值。不過,我注意到我的hashmap只能達到5770的大小。爲什麼會這樣,我該如何解決它?Java hashmap最大大小爲5770?

HashMap<String, String> temp = new HashMap<String, String>(); for(String s : dataFile.getConfigurationSection("users").getKeys(false)) { temp.put(s, dataFile.getString("users." + s + ".group")); }

這就是我用搶的球員,他們的「羣」是什麼。

+2

你怎麼能說「我的hashmap只能達到5770的大小「?你是怎麼檢查的? – ortis 2014-09-01 16:27:30

+0

@ortis對不起,我有一個System.out.println(temp.size()); – SirNickParks 2014-09-01 16:28:45

+1

這不是最大尺寸,這是'HashMap'的當前大小。 'HashMap'的大小隻受JVM和'Integer.MaxValue'的堆大小限制。 – ortis 2014-09-01 16:30:03

回答

3

的HashMap不限,您的問題可能是你有重複鍵..

如果關鍵是把它在地圖上之前已經包含了我會檢查:

if(temp.containsKey(s)){ 
System.out.println("Erasing key "+s+" val "+temp.get(s)); 
} 
temp.put(s, dataFile.getString("users." + s + ".group")); 
7

的HashMap不限,提供爲具有載荷因子增大。

在Sun的JVM中,HashMap使用的是2的冪數組。數組大小允許的最大冪數是2^30。並且在HashMap之前,您可以擁有的最大元素數將會增加到2^31(不能這樣做)的大小是(2^30 * loadFactor),或者默認加載因子大約是7億。

+4

數組被索引爲整數,這是數組最大大小的「限制」。 2的冪是陣列增加的模式 – Cratylus 2014-09-01 16:35:37