gpt4 book ai didi

java - IdentityHashMap 和 expectedmaxsize

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:35 25 4
gpt4 key购买 nike

我一直在浏览 IdentityHashMap 的文档.那个类(class)有一个constructor这需要 expectedmaxsize

public IdentityHashMap(int expectedMaxSize);

在内部,Java 使用 expectedmaxsize 来计算容量,如下所示:

// Compute min capacity for expectedMaxSize given a load factor of 2/3
int minCapacity = (3 * expectedMaxSize)/2;

在进一步探索中,我发现用户应该传递一个很好的 expectedmaxsize 值,这样 IdentityHashMap 就不会在添加更多元素时调整大小。

将此与 HashMap 进行比较, 及其 constructor接受 initialCapacity:

 public HashMap(int initialCapacity)

……还有一个constructor它接受 loadfactorinitialcapacity:

   public HashMap(int initialCapacity, float loadFactor) 

...这里是 HashMap 没有关于 initialcapacity 的指南。

很明显,HashMapIdentityHashMap 管理内部数组大小的方式不同。我不明白为什么我们会有这种差异?为什么 IdentityHashMap 不能提供与 HashMap 相同的构造函数?

最佳答案

正如 JB Nizet 所说,各个构造函数 API 的差异是由于设计人员对程序员最容易理解的内容进行了“二次思考”。 (旧方法不必要地暴露了内部设计的各个方面。)

So clearly there is a difference in the way size of internal array is managed in HashMap and IdentityHashMap.

这是一个错误的推论,事实上也不是真的。如果您仔细查看 HashMap 的相应代码和 IdentityHashMap初始大小和调整大小代码不同,但逻辑基本相同。根据参数确定初始数组大小,然后在达到阈值时将数组大小加倍。 (这是我对代码的阅读……但您可以使用上面的链接自行检查。)

IdentityHashMap 的 javadoc 中遗漏这些东西的原因是不再需要它。在 HashMap 的情况下, Material 必须存在,这样程序员才能知道构造函数参数的含义。简化构造函数参数意味着它们不需要对此进行解释。因此(我推测)他们决定将实际的大小调整机制视为“实现细节”,而不是将其作为“契约(Contract)”的一部分。

关于java - IdentityHashMap 和 expectedmaxsize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com