gpt4 book ai didi

ArrayList及HashMap的扩容规则讲解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章ArrayList及HashMap的扩容规则讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、arraylist 。

默认大小为10 。

?
1
2
3
4
/**
  * default initial capacity.
*/
private static final int default_capacity = 10 ;

最大容量为2^30 - 8 。

?
1
2
3
4
5
6
7
8
9
10
11
12
/**
  * the maximum size of array to allocate.
  * some vms reserve some header words in an array.
  * attempts to allocate larger arrays may result in
  * outofmemoryerror: requested array size exceeds vm limit
  */
private static final int max_array_size = integer.max_value - 8 ;
/**
  * a constant holding the maximum value an {@code int} can
  * have, 2<sup>31</sup>-1.
*/
public static final int  max_value = 0x7fffffff ;

扩容规则为:oldcapacity*1.5 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
  * increases the capacity to ensure that it can hold at least the
  * number of elements specified by the minimum capacity argument.
  * @param mincapacity the desired minimum capacity
  */
private void grow( int mincapacity) {
   // overflow-conscious code
   int oldcapacity = elementdata.length;
   int newcapacity = oldcapacity + (oldcapacity >> 1 );
   if (newcapacity - mincapacity < 0 )
     newcapacity = mincapacity;
   if (newcapacity - max_array_size > 0 )
     newcapacity = hugecapacity(mincapacity);
   // mincapacity is usually close to size, so this is a win:
   elementdata = arrays.copyof(elementdata, newcapacity);
}

2、hashmap 。

默认大小: 16 。

?
1
2
3
4
/**
  * the default initial capacity - must be a power of two.
*/
static final int default_initial_capacity = 1 << 4 ; // aka 16

最大容量为:2^30 。

?
1
2
3
4
5
6
/**
  * 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 ;

扩容规则为:大于oldcapacity的最小的2的n次方整数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * adds a new entry with the specified key, value and hash code to
  * the specified bucket. it is the responsibility of this
  * method to resize the table if appropriate.
  * subclass overrides this to alter the behavior of put method.
  */
void addentry( int hash, k key, v value, int bucketindex) {
   if ((size >= threshold) && ( null != table[bucketindex])) {
     resize( 2 * table.length);
     hash = ( null != key) ? hash(key) : 0 ;
     bucketindex = indexfor(hash, table.length);
   }
   createentry(hash, key, value, bucketindex);
}

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持。如果你想了解更多相关内容请查看下面相关链接 。

原文链接:https://blog.csdn.net/u012099869/article/details/50411767 。

最后此篇关于ArrayList及HashMap的扩容规则讲解的文章就讲到这里了,如果你想了解更多关于ArrayList及HashMap的扩容规则讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

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