Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查哈希表是否为完整java_Java_Hashtable_Capacity - Fatal编程技术网

检查哈希表是否为完整java

检查哈希表是否为完整java,java,hashtable,capacity,Java,Hashtable,Capacity,如本主题所述,如果可以检查哈希表是否已满,如何检查哈希表是否已满 具有: HashMap<Integer, Person> p = new HashMap <>(); 我在某处发现哈希表是用默认大小11创建的,如果需要,它们的容量会自动增加。。。那么,哈希表最终会被填满吗 理论上,HashMap的最大容量为1073741824个元素 来自HashMap的源代码 但在这里,它仅限于用于支持数组的托管数组在Java中可以容纳的元素数。当您尝试分配大数组时,JVM可能会失败,

如本主题所述,如果可以检查哈希表是否已满,如何检查哈希表是否已满

具有:

HashMap<Integer, Person> p = new HashMap <>();

我在某处发现哈希表是用默认大小11创建的,如果需要,它们的容量会自动增加。。。那么,哈希表最终会被填满吗

理论上,HashMap的最大容量为1073741824个元素

来自HashMap的源代码

但在这里,它仅限于用于支持数组的托管数组在Java中可以容纳的元素数。当您尝试分配大数组时,JVM可能会失败,并出现内存不足错误


也就是说,如果HashMap真的太多填充的bucket,HashMap就不需要分配或重新分配大数组,因为键分布不均匀,它将根据键的性质分配更多的树映射或列表节点

理论上,HashMap的最大容量为1073741824个元素

来自HashMap的源代码

但在这里,它仅限于用于支持数组的托管数组在Java中可以容纳的元素数。当您尝试分配大数组时,JVM可能会失败,并出现内存不足错误

也就是说,如果HashMap真的太多填充的bucket,HashMap就不需要分配或重新分配大数组,因为键分布不均匀,它将根据键的性质分配更多的树映射或列表节点

哈希表的默认大小为11

这不是哈希表的大小,而是它拥有的哈希桶的数量

显然,一个包含11个散列桶的表可以容纳少于11项。也许不太明显,一张有11个桶的桌子也可能容纳11个以上的物品,这取决于使用情况

哈希表会满吗

这取决于实施情况。使用单独链接的哈希表,例如Java的HashMap,即使其所有的存储桶都已用尽,也无法获得完整的数据,因为我们可以继续向每个存储桶的各个链添加项。但是,使用太少的哈希桶会导致性能的显著损失

另一方面,具有线性探测的哈希表,例如Java的IdentityHashMap,严格来说,它不是一个有效的基于哈希的容器,当存储桶用完时,它可能会被填满

哈希表的默认大小为11

这不是哈希表的大小,而是它拥有的哈希桶的数量

显然,一个包含11个散列桶的表可以容纳少于11项。也许不太明显,一张有11个桶的桌子也可能容纳11个以上的物品,这取决于使用情况

哈希表会满吗

这取决于实施情况。使用单独链接的哈希表,例如Java的HashMap,即使其所有的存储桶都已用尽,也无法获得完整的数据,因为我们可以继续向每个存储桶的各个链添加项。但是,使用太少的哈希桶会导致性能的显著损失

另一方面,具有线性探测的哈希表,例如Java的IdentityHashMap,严格来说,它不是一个有效的基于哈希的容器,当存储桶用完时,它可能会被填满。

容量参数提供了一个提示,提示实现其内部表的初始大小。这可以节省一些内部大小调整

但是,除非JVM遇到OutOfMemoryError,否则HashMap不会停止接受put

在封面下,hashmap是一个数组。散列用作数组索引。每个数组元素都是对条目对象链接列表的引用。链表可以任意长。

capacity参数为其内部表的初始大小的实现提供提示。这可以节省一些内部大小调整

但是,除非JVM遇到OutOfMemoryError,否则HashMap不会停止接受put


在封面下,hashmap是一个数组。散列用作数组索引。每个数组元素都是对条目对象链接列表的引用。链表可以任意长。

哈希表不会满。增加他们的容量是为了让他们更快地访问,但这并不是对他们能容纳多少的真正限制。@khelwood对,除了最后一部分。。。检查苏莱曼的回答@乔迪卡斯蒂拉没有;包括最后一部分我是对的。@khelwood真的吗?你读了吗?首先,它必须是一个真正的极限,如果不受对象本身的限制,正如苏莱曼的回答所解释的,至少计算机内存会定义这个极限。。。因此,我认为你评论的最后一部分是不正确的你把HashMap和Hashtable搞混了。后者的初始容量为11,但HashMap的初始容量为16。在任何一种情况下,容量都将增加,甚至在包含那么多元素之前,因为默认负载系数为0.75,因此将在13日分别增加。第9次插入。哈希表未满。增加它们的容量是为了让它们更快地访问,但这是不可能的
他们能容纳的数量并没有真正的限制。@khelwood对,除了最后一部分。。。检查苏莱曼的回答@乔迪卡斯蒂拉没有;包括最后一部分我是对的。@khelwood真的吗?你读了吗?首先,它必须是一个真正的极限,如果不受对象本身的限制,正如苏莱曼的回答所解释的,至少计算机内存会定义这个极限。。。因此,我认为你评论的最后一部分是不正确的你把HashMap和Hashtable搞混了。后者的初始容量为11,但HashMap的初始容量为16。在任何一种情况下,容量都将增加,甚至在包含那么多元素之前,因为默认负载系数为0.75,因此将在13日分别增加。这不是大多数人都能理解的能力。它是capacity构造函数参数将被限制的数量,但它不是最大条目数。这不是大多数人所理解的容量。它是capacity构造函数参数将被限制的数字,但不是最大条目数。@Holger。@Holger如果使用线性探测来解决冲突,请检查源代码。我以为霍尔格什么都知道:@Sleiman Jneidi:这是描述碰撞分辨率的。首先它仍然是散列的。所以我反对这种说法,即“严格来说,这不是一个有效的基于散列的容器”。但这与线性探测无关,所以这是一种误导性的说法。特别是,正如您所说的“有效的基于散列的容器”,这并不意味着您谈论的是Java映射接口的契约,而不是一般的基于散列的容器。事实上,尽管达到不适合int值范围的大小可能会导致Java映射的一般问题。我目前正试图将其最大化,但无意中发现,IdentityHashMap使用的是平面数组,而HashMap使用的是条目实例数组,它们比简单的数组槽消耗的内存多得多。目前,我在上面不久1@Holger@Holger它确实使用线性探测来解决冲突,请检查源代码。我以为霍尔格什么都知道:@Sleiman Jneidi:这是描述碰撞分辨率的。首先它仍然是散列的。所以我反对这种说法,即“严格来说,这不是一个有效的基于散列的容器”。但这与线性探测无关,所以这是一种误导性的说法。特别是,正如您所说的“有效的基于散列的容器”,这并不意味着您谈论的是Java映射接口的契约,而不是一般的基于散列的容器。事实上,尽管达到不适合int值范围的大小可能会导致Java映射的一般问题。我目前正试图将其最大化,但无意中发现,IdentityHashMap使用的是平面数组,而HashMap使用的是条目实例数组,它们比简单的数组槽消耗的内存多得多。目前,我刚刚超过1岁
if (p.size()>p "capacity"==true) 
/**
 * The maximum capacity, used if a higher value is implicitly specified
 * by either of the constructors with arguments.
 * MUST be a power of two <= 1<<30.
 */
static final int MAXIMUM_CAPACITY = 1 << 30;