-1

我想创建 hashMap

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

整个程序的 myMap 容量是否可能保持不变?即使我们已经达到满负荷。

4

4 回答 4

0

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

但是,普通HashMap班不是这样工作的。此外,initialCapacity参数为:

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

1 - 该数字由包含初始容量和负载系数的公式确定。

于 2014-09-07T05:54:43.293 回答
0

首先,这initialCapacity不是真正的容量。

当你通过12时,容量是16,这意味着你通过a,系统将使用b >= a并且大部分到达2^N

其次,在 hashmap 中,有一个factor = most num / all capacity. 例如,如果因子 = 0.5,容量为 16,当您放置 8 个对象时,大小将自动扩展。

于 2014-09-07T05:55:21.840 回答
0

虽然 Java 标准库没有大小限制缓存实现,但 Google 的 Guava 有这样一个类。看看https://code.google.com/p/guava-libraries/wiki/CachesExplained#Size-based_Eviction。Cache 具有与 Map 相同的接口,具有可以在创建缓存时定义的附加功能,例如大小限制、条目超时等。

于 2014-09-07T07:42:33.500 回答
0

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

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

这将确保您在超出自定义限制时不会将元素添加到地图中。

于 2014-09-07T05:19:51.607 回答