这是初始大小。
一般来说HashMap会有一个初始大小,然后在你往这个容器中添加内容的时候,
当size大于初始大小,hashMap就会扩大一倍。扩大的过程要消耗资源的。所以如果你知道你的容器大概是多大,就把它初始化到你要的大小,那样效率会好一点。。
一般来说HashMap会有一个初始大小,然后在你往这个容器中添加内容的时候,
当size大于初始大小,hashMap就会扩大一倍。扩大的过程要消耗资源的。所以如果你知道你的容器大概是多大,就把它初始化到你要的大小,那样效率会好一点。。
initialCapacity只是设定一个初始容量而已
而HashMap本身仍然是一个可变的容器
往里面加东西的时候会快一些。:)
int initialCapacity,
float loadFactor)public HashMap(
int initialCapacity,
float loadFactor)
将这两个数相乘计算出一个临界值。每次给哈希表添加一个新的条目时,计数就被更新,当计数超过临界值时,表被重新设置(rehash)。(列表数量增加到以前数量的两倍加1,所有的条目转移到正确的列表中。)缺省的构造器设定最初的容量为11,负载系数是0.75,所以临界值是8。当第九条记录被添加到表中时,就重新调整哈希表,使其有23个列表,新的临界值将是17(23*0.75的整数部分)。你可以看到,负载系数是哈希表中平均列表数量的上限,这就意味着,在缺省情况下,哈希表很少会有许多包含不只一条记录的列表。比较我们最初的例子,在那个例子中,我们有1,000条记录,分布在10个列表中。如果我们用缺省值,这个表将会扩展到含有1,500多个列表。但你可以控制这点。如果用负载系数相乘的列表数量大于你处理的条目数,那么表永远不会重制,所以可以仿效下面的例子:
// Table will not rehash until it
// has 1,100 entries (10*110):
Hashtable myHashTable = new Hashtable(10, 110.0F);你可能不想这么做,除非你没有为空的列表节省内存,而且不介意额外的搜索时间,这可能在嵌入系统中会出现这种情况。然而,这种方法可能很有用,因为重新设置很占用计算时间,而这种方法可以保证永远不会发生重新设置这种情况。注意,虽然调用put()可以使表增大(列表数量增加),调用remove()不会有相反的结果。所以,如果你有一个大的表,而且从中删除了大部分条目,结果你会有一个大的但是大部分是空的表。