可以在java中创建保持初始长度的hashmap吗?

可以在java中创建保持初始长度的hashmap吗?,java,hashmap,maps,capacity,Java,Hashmap,Maps,Capacity,我想创建hashMap private Map<Integer,specificObject> myMap; myMap = new HashMap <Integer,SpecificObject>(initialCapacity); 私有地图myMap; myMap=新HashMap(初始容量); myMap的容量是否可能在整个计划中保持不变? 即使我们已经达到了最大容量。您也可以编写一个方法来检查hashmap的当前大小,如果大小大于n,则抛出一个自定义异常,其中

我想创建hashMap

private Map<Integer,specificObject> myMap;
myMap = new HashMap <Integer,SpecificObject>(initialCapacity);
私有地图myMap;
myMap=新HashMap(初始容量);
myMap的容量是否可能在整个计划中保持不变?
即使我们已经达到了最大容量。

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

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


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

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

但是,常规的
HashMap
类不是这样工作的。此外,
initialCapacity
参数为:

  • 不是地图的大小
  • 不是在需要展开地图之前可以存储的entries1的实际数量,以及
  • 未通过可访问变量或getter公开


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

首先,
初始容量
不是实际容量

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


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

虽然Java标准库没有大小限制缓存实现,但Google的Guava有这样一个类。看一看。缓存具有与地图相同的界面,并具有其他功能,如大小限制、条目超时等,这些功能可在创建缓存时定义。

一旦达到容量,您希望发生什么情况?您是否可以将瓶子装满的水量高于瓶子的容量?基本上没有。如果你想阻止容量的改变,你必须保持HashMap中的一些对象低于loadFactor*容量。我不想改变它的长度。。例如,如果我达到了我希望它抛出一个异常的容量。是否可以使用常规数组?它的大小是最终的,您可以通过索引访问/分配