这里要讨论这些常用的默认初始容量和扩容的原因是:

当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。

加载因子的系数小于等于1,意指  即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。

另外,扩容也是有默认的倍数的,不同的容器扩容情况不同。

List元素是有序的、可重复

ArrayList、Vector默认初始容量为10

Vector:线程安全,但速度慢

底层数据结构是数组结构

加载因子为1:即当 元素个数 超过 容量长度 时,进行扩容

扩容增量:原容量的 1倍

如 Vector的容量为10,一次扩容后是容量为20

ArrayList:线程不安全,查询速度快

底层数据结构是数组结构

扩容增量:原容量的 0.5倍+1

如 ArrayList的容量为10,一次扩容后是容量为16

Set(集)元素无序的、不可重复。

HashSet:线程不安全,存取速度快

底层实现是一个HashMap(保存数据),实现Set接口

默认初始容量为16(为何是16,见下方对HashMap的描述)

加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容

扩容增量:原容量的 1 倍

如 HashSet的容量为16,一次扩容后是容量为32

Map是一个双列集合

HashMap:默认初始容量为16,长度始终保持2的n次方

(为何是16:16是2^4,可以提高查询效率,另外,32=16<<1       -->至于详细的原因可另行分析,或分析源代码)

加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容

扩容增量:原容量的 1 倍

如 HashMap的容量为16,一次扩容后是容量为32

HashTable:默认初始容量为11

线程安全,但是速度慢,不允许key/value为null

加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容

扩容增量:2*原数组长度+1

如 HashTable的容量为11,一次扩容后是容量为23

HashTable和HashMap的具体区别可以参考:http://www.cnblogs.com/xiaoming0601/p/5864022.html

java容量_java中常用集合类的容量相关推荐

  1. java日语_java中常用日语词汇整理

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.今天小编为大家整理了java中常用日语词汇 ...

  2. java arraylist指定容量_Java中的ArrayList的容量

    List接口的大小可变数组的实现.实现了全部可选列表操做,并容许包括 null 在内的全部元素. ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操做内部用来存储列表的数组的 ...

  3. sha java 应用_Java中常用的加密算法应用MD5,SHA,RSA

    1. MD5加密,常用于加密用户名密码,当用户验证时. protected byte[] encrypt(byte[] obj) ...{ try ...{ MessageDigest md5 = M ...

  4. Java并发包中常用类

    Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...

  5. 第十三章_Java中常用集合大整理(含底层数据结构简单介绍)

    第十三章_Java中常用集合大整理 1.集合和数组的区别 集合 既可以存储基本数据类型还可以存储引用数据类型 定长–>是数组最大的特点,也是最大的缺点 数组 只能存储引用数据类型 长度可变 相同 ...

  6. Java并发包中常用类小结(一)

                                   Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来 ...

  7. java list初始容量_java中快速创建带初始值的List和Map实例

    java中快速创建带初始值的List和Map实例 初始化一个List和Map对象并为期加入值的写法如下: List sList = new ArrayList(); sList.add("s ...

  8. java判断集合为空_Java中判断集合类为空的方法

    *****需要引入Spring的核心Jar包***** 工具类: org.springframework.util.CollectionUtils 方法: public static boolean ...

  9. JAVA中常用的逻辑运算符_Java中常用的运算符

    运算符是一种"功能"符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运 ...

最新文章

  1. 液压系统管路流速推荐表_液压系统管道尺寸的计算
  2. windows phone7资料整理
  3. webgl 着色器_如何在WebAssembly中使用WebGL着色器
  4. 在 PHP 中使用命令行工具
  5. html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
  6. 搞笑创意海报灵感|终于知道设计该怎么做了!
  7. django之关系及查询,数据类型,约束,分页
  8. Applet类的方法
  9. Chapter 05 绘图基础
  10. SuperMap的数据组织
  11. Python爬虫爬取哈利波特小说,并用数据可视化分析出场人物
  12. checkbox如何默认选中
  13. ai文字渐变_AI制作渐变色立体文字效果
  14. android音频驱动工程师,4.Android音频驱动(底层1)
  15. JAVA 导出大批量数据EXCEL
  16. Mybase使用教程-不古出品
  17. Linux JKD1.8 安装及配置
  18. Python爬虫可以爬取什么呢?
  19. 浅谈C语言中数组理解
  20. oracle 在CMD下登陆并进行用户密码修改

热门文章

  1. linux包之bash之内置命令ulimit
  2. 【cocos2d-x】对CCSprite进行高斯模糊
  3. TCP握手协议的巧计方法
  4. 调试错误:ValueError: Protocol message Feature has no quot;featurequot; field.
  5. java动态代理实现与原理详细分析(【转载】By--- Gonjan )
  6. centos7黑客帝国装逼
  7. VS2010 发布网站总是连同cs文件一起发布了
  8. centos7下kubernetes(1。kubernetes---start)
  9. 步步为营-92-空格变成问号的怪问题
  10. Retrofit2设置返回类型是字符串(String)类型