我想创建 hashMap
private Map<Integer,specificObject> myMap;
myMap = new HashMap <Integer,SpecificObject>(initialCapacity);
整个程序的 myMap 容量是否可能保持不变?即使我们已经达到满负荷。
你可以自己实现这样一个类。(显而易见的方法是创建一个包装类来HashMap
检查地图的大小,等等,每次调用时put
。)
但是,普通HashMap
班不是这样工作的。此外,initialCapacity
参数为:
1 - 该数字由包含初始容量和负载系数的公式确定。
首先,这initialCapacity
不是真正的容量。
当你通过12
时,容量是16
,这意味着你通过a,系统将使用b >= a
并且大部分到达2^N
。
其次,在 hashmap 中,有一个factor = most num / all capacity
. 例如,如果因子 = 0.5,容量为 16,当您放置 8 个对象时,大小将自动扩展。
虽然 Java 标准库没有大小限制缓存实现,但 Google 的 Guava 有这样一个类。看看https://code.google.com/p/guava-libraries/wiki/CachesExplained#Size-based_Eviction。Cache 具有与 Map 相同的接口,具有可以在创建缓存时定义的附加功能,例如大小限制、条目超时等。
您可以编写一个方法来检查 hashmap 的当前大小,如果大小大于 n 则抛出自定义异常,其中 n 是您想要的最大容量。
现在,在编写 map.put 之前,在代码中添加对上述方法的调用。
这将确保您在超出自定义限制时不会将元素添加到地图中。