java容量_java中常用集合类的容量
这里要讨论这些常用的默认初始容量和扩容的原因是:
当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。
加载因子的系数小于等于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中常用集合类的容量相关推荐
- java日语_java中常用日语词汇整理
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.今天小编为大家整理了java中常用日语词汇 ...
- java arraylist指定容量_Java中的ArrayList的容量
List接口的大小可变数组的实现.实现了全部可选列表操做,并容许包括 null 在内的全部元素. ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操做内部用来存储列表的数组的 ...
- sha java 应用_Java中常用的加密算法应用MD5,SHA,RSA
1. MD5加密,常用于加密用户名密码,当用户验证时. protected byte[] encrypt(byte[] obj) ...{ try ...{ MessageDigest md5 = M ...
- Java并发包中常用类
Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...
- 第十三章_Java中常用集合大整理(含底层数据结构简单介绍)
第十三章_Java中常用集合大整理 1.集合和数组的区别 集合 既可以存储基本数据类型还可以存储引用数据类型 定长–>是数组最大的特点,也是最大的缺点 数组 只能存储引用数据类型 长度可变 相同 ...
- Java并发包中常用类小结(一)
Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来 ...
- java list初始容量_java中快速创建带初始值的List和Map实例
java中快速创建带初始值的List和Map实例 初始化一个List和Map对象并为期加入值的写法如下: List sList = new ArrayList(); sList.add("s ...
- java判断集合为空_Java中判断集合类为空的方法
*****需要引入Spring的核心Jar包***** 工具类: org.springframework.util.CollectionUtils 方法: public static boolean ...
- JAVA中常用的逻辑运算符_Java中常用的运算符
运算符是一种"功能"符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运 ...
最新文章
- 液压系统管路流速推荐表_液压系统管道尺寸的计算
- windows phone7资料整理
- webgl 着色器_如何在WebAssembly中使用WebGL着色器
- 在 PHP 中使用命令行工具
- html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc
- 搞笑创意海报灵感|终于知道设计该怎么做了!
- django之关系及查询,数据类型,约束,分页
- Applet类的方法
- Chapter 05 绘图基础
- SuperMap的数据组织
- Python爬虫爬取哈利波特小说,并用数据可视化分析出场人物
- checkbox如何默认选中
- ai文字渐变_AI制作渐变色立体文字效果
- android音频驱动工程师,4.Android音频驱动(底层1)
- JAVA 导出大批量数据EXCEL
- Mybase使用教程-不古出品
- Linux JKD1.8 安装及配置
- Python爬虫可以爬取什么呢?
- 浅谈C语言中数组理解
- oracle 在CMD下登陆并进行用户密码修改
热门文章
- linux包之bash之内置命令ulimit
- 【cocos2d-x】对CCSprite进行高斯模糊
- TCP握手协议的巧计方法
- 调试错误:ValueError: Protocol message Feature has no quot;featurequot; field.
- java动态代理实现与原理详细分析(【转载】By--- Gonjan )
- centos7黑客帝国装逼
- VS2010 发布网站总是连同cs文件一起发布了
- centos7下kubernetes(1。kubernetes---start)
- 步步为营-92-空格变成问号的怪问题
- Retrofit2设置返回类型是字符串(String)类型