Jdk7不同集合的扩容机制

embedded/2025/3/17 6:46:08/

Jdk7不同集合的扩容机制

集合类初始容量负载因子扩容公式扩容时机
ArrayList10新容量 = 旧容量 × 1.5元素数量超过容量时
HashMap160.75新容量 = 旧容量 × 2元素数量超过 容量 × 负载因子
HashSet160.75新容量 = 旧容量 × 2元素数量超过 容量 × 负载因子
Vector10新容量 = 旧容量 + 增量 或 × 2元素数量超过容量时
Hashtable110.75新容量 = 旧容量 × 2 + 1元素数量超过 容量 × 负载因子

通过了解不同集合类的扩容机制,可以更好地选择和使用合适的集合类,避免频繁扩容带来的性能开销。

ArrayList

private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;// newCapacity = oldCapacity + oldCapacity / 2int 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);
}

HashMap

头插法

void addEntry(int hash, K key, V value, int bucketIndex) {if ((size >= threshold) && (null != table[bucketIndex])) {// 旧容量 * 2resize(2 * table.length);hash = (null != key) ? hash(key) : 0;bucketIndex = indexFor(hash, table.length);}createEntry(hash, key, value, bucketIndex);
}

HashSet

通过HashMap实现的.

public HashSet() {map = new HashMap<>();}

Hashtable

protected void rehash() {HashtableEntry e, old;int i, index;int oldCapacity = table.length;HashtableEntry oldTable[] = table;// 新容量 = 旧容量 × 2 + 1int newCapacity = oldCapacity * 2 + 1;HashtableEntry newTable[] = new HashtableEntry[newCapacity];threshold = (int)(newCapacity * loadFactor);table = newTable;for (i = oldCapacity ; i-- > 0 ;) {for (old = oldTable[i] ; old != null ; ) {e = old;old = old.next;index = (e.hash & 0x7FFFFFFF) % newCapacity;e.next = newTable[index];newTable[index] = e;}}
}

Vector

private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);elementData = Arrays.copyOf(elementData, newCapacity);}

http://www.ppmy.cn/embedded/173270.html

相关文章

科技工作者之家建设扬帆起航,为科技人才提供更多优质服务

大湾区经济网深圳讯&#xff0c;2025年3月11日&#xff0c;由深圳市高科技企业协同创新促进会主办的“科技工作者之家建设启动暨第五届新质生产力驱动成长型&制造业企业高质量发展专题咨询活动”在深圳凯宾斯基酒店隆重举行。本届高质量发展专题活动在往届成功经验的基础上…

项目-苍穹外卖(六)删除菜品+修改菜品

一、删除菜品 需求分析和设计&#xff1a; Controller&#xff1a; Service&#xff1a; 处理逻辑&#xff1a;将传递过来的ids字符串拆分成字符串数组 通过遍历确定字符串数组中每个元素&#xff08;id&#xff09;对应的菜品是否在售或者是否与其他套餐相关联 套餐部分需…

目标检测基础知识(面试应对)

&#x1f4cc; 面试核心考察点 1️⃣ 你的项目经历和技术应用 重点问法&#xff1a;你在某个项目中做了什么&#xff1f;用到了哪些技术&#xff1f;遇到什么问题&#xff1f;怎么解决的&#xff1f;应对方法&#xff1a;用 STAR 法则&#xff08;Situation 背景, Task 任务,…

Redis调优:从老牛车到磁悬浮的飙车指南

各位被Redis性能按在地上摩擦的车手们&#xff01;今天我们要把这辆老牛破车改装成贴地飞行的磁悬浮&#xff01;从每秒撑死几千QPS的绝望&#xff0c;到百万级吞吐量的真香现场&#xff0c;系好安全带&#xff0c;准备开启性能压榨的狂暴模式&#xff01; &#x1f3ce;️&…

国产芯片替代方案:解析沁恒以太网控制器芯片,内置MAC地址

沁恒CH390系列以太网控制器芯片&#xff1a;DM9051/DM9000的理想替代方案 一、概述 沁恒&#xff08;WCH&#xff09;推出的CH390L和CH390H以太网控制器芯片&#xff0c;凭借‌内置MAC地址‌、‌硬件兼容性‌和‌增强功能特性‌&#xff0c;成为DM9051&#xff08;CH390L替代…

后端开发中CRUD的详细讲解

后端开发中CRUD的详细讲解 在上一篇文章中&#xff0c;我们详细讲解了后端开发中CRUD操作的基础知识、Java代码示例以及面试回答思路。为了让大家对CRUD有更深入的理解和更广泛的应用&#xff0c;本文将在此基础上进行拓展&#xff0c;探讨CRUD操作的高级应用、最佳实践以及在…

EDAS:投稿经验-word版本-问题解决

1. 字体不对&#xff0c;字体未嵌入问题 问题&#xff1a;word转PDF后&#xff0c;总是显示有字体格式不对&#xff08;忘记截图了&#xff09;。 办法&#xff1a;1. EDAS投稿PDF格式问题-CSDN博客-PDF上修改 IEEE论文检测的字体未嵌入问题Times New Ro…

Python中很常用的100个函数整理

Python 内置函数提供了强大的工具&#xff0c;涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数&#xff0c;并配备示例代码&#xff0c;提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…