2014-09-01 61 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