当前位置: 首页 > 编程笔记 >

ArrayList及HashMap的扩容规则讲解

袁志专
2023-03-14
本文向大家介绍ArrayList及HashMap的扩容规则讲解,包括了ArrayList及HashMap的扩容规则讲解的使用技巧和注意事项,需要的朋友参考一下

1、ArrayList

默认大小为10

/**
 * Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;

最大容量为2^30 - 8

 /**
 * 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

/**
 * 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

/**
 * The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

最大容量为:2^30

/**
 * 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次方整数

/**
 * 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);
}

总结

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

 类似资料:
  • 3 采集规则 3.1 Spider结构体 Spider结构体用于定义蜘蛛规则。 3.1.1 一条简单的蜘蛛规则 func init() { BaiduSearch.AddMenu() } var BaiduSearch = &Spider{ Name: "百度搜索", Description: "百度搜索结果 [www.baidu.com]", //

  • 这是我唯一的代码:

  • 问题内容: 我想对包含特定单词的所有锚应用不同的样式。可以在纯CSS中完成吗?如果仅CSS3,也可以。 问题答案: 编号曾经被提议过,但不在CSS3选择器的当前工作草案中。 您将需要一些JavaScript,例如:

  • 本文向大家介绍说一说 ArrayList 的扩容机制吧?相关面试题,主要包含被问及说一说 ArrayList 的扩容机制吧?时的应答技巧和注意事项,需要的朋友参考一下   ArrayList是List接口的实现类,它是支持根据需要而动态增长的数组。java中标准数组是定长的,在数组被创建之后,它们不能被加长或缩短。这就意味着在创建数组时需要知道数组的所需长度,但有时我们需要动态程序中获取数组长度。

  • MD5签名SDK下载(JAVA/PHP/.NET):https://www.wenjiangs.com/doc/RV0OpbQJLtMD5SignSDK.zip Java MD5签名实现 参考示例:http://blog.csdn.net/u011627980/article/details/52778326 签名规则: 变现猫与开发者之间所有的请求进行md5签名,确保传输的安全可靠。 签名原理:

  • 本文向大家介绍Java中Arraylist动态扩容方法详解,包括了Java中Arraylist动态扩容方法详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于Java中Arraylist动态扩容的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 ArrayList 概述 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。Arra