是否可以在java hashmap中创建保持其初始长度?

时间:2014-09-07 05:02:08

标签: java hashmap maps capacity

我想创建hashMap

private Map<Integer,specificObject> myMap;
myMap = new HashMap <Integer,SpecificObject>(initialCapacity);

对于整个程序,myMap容量是否可能保持不变? 即使我们已达到满负荷运转状态。

4 个答案:

答案 0 :(得分:0)

您可以编写一个方法来检查hashmap的当前大小,并在大小大于n时抛出自定义异常,其中n是您想要的最大容量。

现在,在编写map.put之前,在代码中添加对上面方法的调用。

这将确保您在超出自定义限制时不会添加要映射的元素。

答案 1 :(得分:0)

您可以自己实施这样的课程。 (显而易见的方法是为HashMap创建一个包装类,每次调用put时都会检查地图的大小等。)

但是,常规HashMap类不起作用。此外,initialCapacity参数是:

  • 不是地图的大小,
  • 不是实际条目数量 1 ,您可以在需要展开地图之前存储这些条目
  • 未通过可访问的变量或getter公开。

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相同的接口,具有大小限制,条目超时等附加功能,可在创建缓存时定义。