美文网首页java笔记
Java 各种容器类默认初始容量以及每次扩容的大小

Java 各种容器类默认初始容量以及每次扩容的大小

作者: 胜杰pro | 来源:发表于2018-07-31 19:47 被阅读0次

一些容器类的构造函数有默认的参数,用来控制容器的初始容量,建议是尽可能准确地预测容量需求,根据需求创建指定大小的容器,而不是使用默认的容量,这样可以有效减少内存的浪费,以及扩容所带来的开销。

总结一下就是除了在首次申请空间以及超过上限的情况下,基本都是直接翻倍申请新的空间,然后还涉及到原有key的rehash问题,所以扩容的开销也是蛮大的,在resize的过程中,空间占用的峰值会达到原有空间3倍,所以设置合理的capacity和loadFactor可以在很大程度上提高性能。

所有有自动扩容功能的非链表实现的容器基本都有这个过程,下面总结一下常见的一些容器的默认初始容量和扩容策略:

容器类:初始长度/扩容倍数

  • ArrayList:10/1.5
  • ArrayDeque:8/2
  • BitSet:64/2
  • HashMap:16/2
  • HashSet/TreeSet:同HashMap(基于HashMap实现,value为空Object)
  • Hashtable:11/2
  • WeakHashMap:同HashMap
  • PriorityQueue:11/Double size if small; else grow by 50%
  • StringBuilder:16/按需

相关文章

  • Java 各种容器类默认初始容量以及每次扩容的大小

    一些容器类的构造函数有默认的参数,用来控制容器的初始容量,建议是尽可能准确地预测容量需求,根据需求创建指定大小的容...

  • Java ArrayList阅读笔记

    ArrayList: 默认初始化容量为10; 每次插入前先进行扩容检测及扩容,扩容大小为原容量的一半(例:10+5...

  • ArrayList

    1、基本机构 2、扩容机制 在容量达到极限的时候扩容,每次扩容原来的1/2(右移一位),默认初始容量为10由于没有...

  • ArrayList扩容机制

    没有指定初始容量大小的ArrayList,在初始默认元素数组大小默认为0,在第一次放入元素时,会进行扩容操作,将容...

  • HashMap

    Q: HashMap什么时候会进行扩容?HashMap在初始化时可以给定初始容量和负载因子,默认的初始容量和负载因...

  • Java集合类深入理解

    ArrayList: 动态扩容,扩容最大到 Integer.MaxValue 2的31次方,默认初始化容量为10,...

  • 常见集合容器的初始容量、加载因子、扩容倍数

    常见集合容器的初始容量、加载因子、扩容倍数 基于数组的集合,当数据元素的数目达到容量的上限时,容器会重新分配一段更...

  • 面试流水(二)

    arraylist和hashmap容易混淆的点 初始化 arraylist初始化默认容量是10,扩容条件是放不下才...

  • ArrayList、Vector、HashMap、HashTab

    在复习Java基础容器扩容相关时,发现许多博客写的十分混乱,整理一下源码和结论 ArrayList 默认初始10个...

  • HashMap 1.8 源码简读

    HashMap 1.8 源码简读 初始大小:默认为16 如果指定了大小,则会在初始化的时候将初始容量大小设置为大于...

网友评论

    本文标题:Java 各种容器类默认初始容量以及每次扩容的大小

    本文链接:https://www.haomeiwen.com/subject/qpfkvftx.html