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