StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable 的扩容机制
1. StringBuffer、StringBuilder 的扩容机制
StringBuffer、StringBuilder,默认初始化是 16 个字符,默认增容为 原长度+2
→ 扩容后:2*(n+1)
代码如下:
//默认初始化大小
public StringBuilder() {super(16);
}// 默认扩容
int newCapacity = (value.length + 1) * 2;
2. ArrayList 的扩容机制
ArrayList,初始默认长度为 10 ,每次扩容是 原容量的一半
→ 扩容后:1.5*n
具体代码如下:
public ArrayList() {this(10);
} int newCapacity = (oldCapacity * 3)/2 + 1;public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
3. Vector 的扩容机制
Vector,初始默认长度为 10 ,每次扩容是 原容量的一倍
→ 扩容后:2*n
具体代码如下:
public Vector() {this(10);
} int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2);
4. HashMap 的扩容机制
HashMap,初始默认长度为 16 (必须是2的次方),默认每次的扩容因子为 0.75
→ 扩容后:2*n
具体代码如下:
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;public HashMap() {this.loadFactor = DEFAULT_LOAD_FACTOR;threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);table = new Entry[DEFAULT_INITIAL_CAPACITY];init();
}resize(2 * table.length);
5. HashTable 的扩容机制
HashTable,默认初始 11 ,默认每次扩容的因子为 0.75
→ 扩容后:2*n+1
具体代码如下:
public Hashtable() {this(11, 0.75f);
}int newCapacity = oldCapacity * 2 + 1;
StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable 的扩容机制相关推荐
- jdk8 HashMap初始化和扩容机制
工作中大家讨论HashMap设置初始化容量的问题,写篇文章好好聊聊. 一.jdk8 HashMap初始化和扩容机制 以下面的代码为例 Map<String, String> map = n ...
- HashMap底层的扩容机制(以及2倍扩容的原因)
文章目录 HashMap底层的扩容机制 resize扩容 resize源码 源码文字说明 HashMap底层为什么是2倍扩容? HashMap底层的扩容机制 resize扩容 HashMap会在两个地 ...
- OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
20150506 Created By BaoXinjian 一.摘要 Vector.ArrayList和Hashtable Jashmap的异同 线性表,链表,哈希表是常用的数据结构,在进行Java ...
- HashMap扩容机制解读
扩容机制 什么时候需要扩容: 当hashmap中的元素个数超过数组大小 * loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR) ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part9~整起(单双列集合们、ArrayList 的扩容机制、HashMap、ConcurrentHashMap )
再进入正文之前,先看看集合相关操作的时间复杂度: 本故事源自于~ 开唠: PART0: 为什么突然蹦出集合这个玩意,就是因为咱们基础那里学的"数组"不够用~: 数组一般用来保存一组 ...
- 分析HashTable、HashMap、ConcurrentHashMap的结构、初始化及扩容机制
目录 一.前沿 二.HashTable 三.HashMap Jdk1.7 Jdk1.8 四.ConcurrentHashMap Jdk1.7 Jdk1.8 五.总结 一.前沿 相信很多同学对HashT ...
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
- Java 里的HashMap(HashTable) 简介.
之前已经介绍过Java的另1个容器HashSet. 其实HashMap的存储原来跟HashSet区别不大, 可以说是HashSet的1个扩展. 一,预备知识: 哈希表 我们可以把哈希表看做是1个特别 ...
- Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)
关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍 Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...
最新文章
- 中国AI芯片产业发展白皮书:未来三年年均增长率超50%
- 安装Ubuntu16.04并安装sogoupiyin for linux
- container_of 用法解析
- 专业程序员必知必会技巧:驯服复杂代码
- 简单的单级下拉菜单实现
- 交换机是如何对数据包打标签去标签的_条形码软件如何在标签纸上套打可变条码...
- VS2003使用后的一点心得
- mfc控件随框变化(EasySize的用法,仔细看绝对有用)
- IPv4 和 IPv6 有什么区别
- c++字符串数组去重的另类思路
- wait会释放锁吗_漫画:如何证明sleep不释放锁,而wait释放锁?
- 人工智能?你需要了解的内容和AI学习路线
- Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
- ubuntu相关软件下载
- 专业显卡深度学习_MacOS+AMD-eGPU打造深度学习环境 | 第2期
- 用ajax请求本地的json失效,通过jquery的ajax请求本地的json文件方法
- 联合国首席AI顾问专访:我们期望AI应该是完美的,但这永远不会
- 这家协同办公软件厂商,也曾如盛夏莲花般绽放
- Linux查看gzip文件原始大小,Linux 文件管理:Linux gzip 压缩
- 浏览器端可以直接运行Python了
热门文章
- 电脑销售渠道_“新冠”影响下,平板电脑市场再现新商机
- linux下1sa 密码失效,SA口令
- 现代操作系统:进程和线程总结
- jquery删除数组中的某个元素下标越界_Java数据结构和算法(二)—数组
- docwizard c++程序文档自动生成工具_工具用的好,老师下班早!老师的高效办公利器都在这!...
- win2003 ip安全策略
- 排序命令: sort, wc, uniq
- (实际开发大数据分析系统)网络爬虫获取数据与销售数据分析系统
- 通讯框架 t-io 学习——websocket 部分源码解析
- 【Django】模型层说明