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

关系建设的网站免费开源门户网站系统

关系建设的网站,免费开源门户网站系统,宿迁市房地产信息网,免费咨询在线律师HashMap 的 put 方法是一个常用的操作,它将一个键值对插入到哈希表中。下面是 put 方法执行的详细流程,包括各个步骤的解释,并附上相应的代码片段。 1. 检查键是否为 null 如果传入的键为 null,HashMap 会特别处理这种情况&…

HashMapput 方法是一个常用的操作,它将一个键值对插入到哈希表中。下面是 put 方法执行的详细流程,包括各个步骤的解释,并附上相应的代码片段。

1. 检查键是否为 null

如果传入的键为 nullHashMap 会特别处理这种情况,因为 null 是允许作为键的,但是它会在特殊位置(通常是数组的第一个位置)存储。

if (key == null) {return putForNullKey(value);
}

2. 计算哈希值

对于非 null 的键,HashMap 会首先计算出该键的哈希值。哈希值的计算是通过调用键的 hashCode() 方法,再经过一定的扰动处理,以减少哈希冲突。

int hash = hash(key.hashCode());
int index = indexFor(hash, table.length);

这里的 hash() 是一个方法,用于对键的哈希值进行扰动,indexFor() 方法则用来根据计算出的哈希值找到数组中的位置。

3. 查找位置

接下来,HashMap 会根据计算出的索引(index)来查找对应的桶(数组位置)。如果该位置已经存在元素,则会检查该位置的链表或红黑树结构,查看是否已经存在相同的键。

for (Entry<K,V> e = table[index]; e != null; e = e.next) {K k;if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;return oldValue;}
}

4. 插入新元素

如果在相应位置没有找到相同的键,HashMap 会将新的键值对插入到桶中。如果该位置为空,直接插入该元素。如果该位置已经存在链表或红黑树,则会把新元素加入到链表头部或树中。

createEntry(hash, key, value, index);

5. 扩容

HashMap 会根据当前的负载因子(默认是 0.75)来判断是否需要扩容。如果当前元素数量超出了负载因子的限制,HashMap 会进行扩容操作,这会重新计算每个元素的位置,并将元素重新插入到新的数组中。

if (size > threshold)resize();

完整代码示例

public V put(K key, V value) {if (key == null) {return putForNullKey(value);}int hash = hash(key.hashCode());int index = indexFor(hash, table.length);for (Entry<K,V> e = table[index]; e != null; e = e.next) {K k;if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;return oldValue;}}createEntry(hash, key, value, index);if (size++ >= threshold) {resize();}return null;
}private int hash(int h) {h ^= (h >>> 20) ^ (h >>> 12);return h ^ (h >>> 7) ^ (h >>> 4);
}private int indexFor(int hash, int length) {return hash & (length - 1);
}private void createEntry(int hash, K key, V value, int bucketIndex) {Entry<K,V> e = table[bucketIndex];table[bucketIndex] = new Entry<>(hash, key, value, e);
}private void resize() {// 扩容的具体实现
}

关键点总结:

  1. 哈希值计算:使用 hashCode 和扰动函数来减少冲突。
  2. 桶的查找:通过数组索引查找对应位置,如果发生冲突,使用链表或红黑树来存储多个元素。
  3. 元素插入:如果该位置没有找到相同的键,插入新元素。
  4. 扩容机制:当负载因子达到一定比例时,HashMap 会扩展数组并重新散列元素。

这个过程对于每次调用 put 都是会依次执行的,确保 HashMap 的高效插入与查询操作。

http://www.yayakq.cn/news/129810/

相关文章:

  • 杭州企业网站设计制作东莞网站建设黄页免费软件
  • 网站设计费用明细wordpress 视频自适应插件
  • 黑龙江省建设工程质量安全协会网站网站的空间租用费
  • php网站后台开发正规电商培训班
  • 网站排名优化怎么样上海嘉定区网站建设公司
  • 做logo的ppt模板下载网站网站建设合同英文版
  • 方太官方网站的建设情况滴滴网站建设流程图
  • 全屏网站大小seo综合查询是什么意思
  • 怎么快速建网站网站怎么添加流量
  • 北流科技网站建设闵行区是郊区吗
  • 如何建立公司的销售网站网上申报流程
  • 上海公司网站设计美食网站二级页面模板
  • 免费小程序开发制作志鸿优化设计答案网
  • 湖南建网站水果建设网站前的市场分析
  • 怎样保存网站资料 做证据免费p2p网站建设
  • 免费html网站建站之星做出的网站不安全
  • 宁德企业网站建设建筑设计公司名称起名
  • 中国室内设计培训排名太原seo外包公司
  • 济宁网站建设怎么样网页设计师培训需要多少钱
  • 做购物网站学什么技术做网站原型图软件
  • 企业官方网站管理制度江苏住房建设厅主办网站
  • 自己弄一个网站要多少钱网站二级目录
  • 任县网站制作精选网站建设
  • 淄博教育学校网站建设常州微信网站建设
  • 河池个人网站开发公司青岛seo招聘
  • 山西省建设执业资格注册中心网站哪个基层司法所网站做的比较好
  • 阜宁网站开发大良营销网站建设教程
  • 广州网站建设广州网络推广公司排名竞价什么意思
  • 做计算机网站有哪些功能百度竞价排名收费
  • 美容医疗手机网站模板张家港网站建设培训