当前位置: 首页 > news >正文

重庆网站建设排名电商运营主要工作内容

重庆网站建设排名,电商运营主要工作内容,建设网站公司名称大全,wordpress如何把背景颜色调为白色HashMap 的一个关键性能优化就是扩容机制,即在哈希表达到一定负载因子时,自动进行扩容,以保持检索效率。 在这篇文章中,我们将深入研究 HashMap 的扩容机制,了解其原理和影响因素。 1. 初始容量和负载因子 在深入了解…

HashMap 的一个关键性能优化就是扩容机制,即在哈希表达到一定负载因子时,自动进行扩容,以保持检索效率。

在这篇文章中,我们将深入研究 HashMap 的扩容机制,了解其原理和影响因素。

1. 初始容量和负载因子

在深入了解 HashMap 的扩容机制之前,我们先了解一下 HashMap 的构造函数中的两个重要参数:

初始容量和负载因子。

public HashMap(int initialCapacity, float loadFactor)

1.1 initialCapacity(初始容量)

表示 HashMap 创建时的容量大小。默认为16,但可以根据预估的元素数量进行调整,以减少扩容次数。

1.2 loadFactor(负载因子)

表示哈希表在达到多少比例的容量时进行扩容。默认为0.75,即当哈希表的实际元素数量达到容量的 75% 时触发扩容。

2. 哈希表和负载因子的关系

HashMap 通过调整负载因子来平衡空间利用率和查找性能。

负载因子越大,哈希表的容量利用率越高,但可能导致哈希冲突增多;负载因子越小,哈希表的容量利用率越低,但减少了哈希冲突的可能性。

3. 扩容触发条件

HashMap 在什么情况下触发扩容呢?当哈希表中的元素数量达到负载因子与当前容量的乘积时,触发扩容操作。

具体公式为:

size > capacity * loadFactor

这时,HashMap 会将容量扩大为当前容量的两倍,并将原有的元素重新分配到新的哈希桶中。

4. 扩容过程

HashMap 的扩容过程并非简单地将数组大小翻倍。具体来说,扩容分为以下几个步骤:

4.1 创建新的哈希表数组

新的容量是原来容量的两倍,并且是大于等于当前元素数量除以负载因子的最小的2的幂。

int newCapacity = oldCapacity << 1;
while (newCapacity < size / loadFactor) {newCapacity <<= 1;
}

数组初始化值是 16,元素达到 12 时进行扩容,2 倍进行扩容后为 32。

4.2 迁移元素

将原哈希表中的元素重新计算哈希码并放入新的哈希表中。

//遍历旧数组
for (int j = 0; j < oldCap; ++j) {Node<K,V> e;if ((e = oldTab[j]) != null) {oldTab[j] = null;if (e.next == null)//hash、数组大小,进行与运算newTab[e.hash & (newCap - 1)] = e;else if (e instanceof TreeNode)((TreeNode<K,V>)e).split(this, newTab, j, oldCap);else { // preserve order//.......}}
}

重新 hash 计算,我们看到 JDK 采用的是与运算,没有采用取模计算,与运算效率更高。

4.3 替换旧的哈希表

扩容完成后,将新的哈希表替换为原来的哈希表。

table = newTable;

5. 扩容过程的性能影响

HashMap 的扩容虽然为了维持性能,但在扩容过程中可能引起性能波动。

在扩容期间,如果有其他线程正在对 HashMap 进行并发修改,可能会导致遍历不一致性或者链表/红黑树的结构异常。这也是为什么在多线程环境中建议使用 ConcurrentHashMap。

6. 性能优化建议

为了减少扩容次数,我们可以在创建 HashMap 时提前设定足够的初始容量。这样可以减少哈希冲突的可能性,延缓扩容操作的发生。

Map<String, Integer> map = new HashMap<>(1024, 0.75f);

总结

通过深入了解 HashMap 扩容原理,合理选择初始容量和负载因子,负载因子参数一般不建议修改,注意并发修改可能引起的问题,都是使用 HashMap 时需要考虑的重要因素。

希望今天的内容对初学 Java 的朋友有所启发或者帮助。各位,有帮助点个赞或在看呀:-),这对我非常重要。

http://www.hkea.cn/news/558659/

相关文章:

  • 手机网站用模版方象科技的企业愿景
  • 沈阳网站建设技术公司排名公司市场营销策划方案
  • 赣州网站建设怎样石家庄最新消息
  • 公司注册地址和经营地址不一致可以吗长春seo招聘
  • 好的做问卷调查的网站好推广有奖励的app平台
  • 有专业设计网站吗百度指数与百度搜索量
  • 网站的整体结构百度云网盘资源搜索引擎入口
  • 咸阳网站建设哪家专业杭州优化公司在线留言
  • 地板网站建设门户网站
  • 新增备案网站负责人人工智能培训心得体会
  • 帮境外赌场做网站是否有风险百度企业号
  • 网站换了服务器百度seo排名优化公司哪家好
  • 海南网站建设制作网络营销效果评估
  • 飞阳建设网站上海广告公司
  • 营销网站导航栏常见网站搜索排名靠前
  • 深圳市政府网站官网百度地图疫情实时动态
  • 上海建设工程咨询网 首页深圳优化排名公司
  • 杭州哪个网站建设最好做网站的网络公司
  • 制作一个网站步骤东莞网络营销销售
  • 专业的营销网站建设公司百度联盟注册
  • 机械类网站用什么做背景指数运算法则
  • 微信如何绑定网站加速游戏流畅的软件
  • 茂名整站优化百度问答首页
  • 手机网站搭建网络宣传方式
  • 2003网站建设网站seo哪家公司好
  • 成都学校网站制作2022年国际十大新闻
  • 工厂外贸网站建设台州网络推广
  • 酒店网站建设方案策划百度seo怎么做网站内容优化
  • 网站更改公司需要重新备案吗搜索网页内容
  • 现在做网站还用dw做模板了吗成人电脑速成培训班