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

如何做网站反链美国疫情最新数据消息

如何做网站反链,美国疫情最新数据消息,工程建设项目管理办法实施细则,哈尔滨香坊城乡建设委员会网站39. 说一下 HashMap 的实现原理? HashMap 是 Java 中使用非常普遍的一种基于散列的映射数据结构,主要用于存储键值对。它允许使用任何非空对象作为键和值,主要实现原理如下: 数组 链表 红黑树:HashMap 内部主要由一…

39. 说一下 HashMap 的实现原理?

HashMap 是 Java 中使用非常普遍的一种基于散列的映射数据结构,主要用于存储键值对。它允许使用任何非空对象作为键和值,主要实现原理如下:

  1. 数组 + 链表 + 红黑树:HashMap 内部主要由一个数组构成,每个数组元素是一个链表或红黑树,链表或红黑树用于存储具有相同散列码的键值对。
  2. 散列函数:当向 HashMap 中插入一个键值对时,首先会使用散列函数计算键的散列码,散列码决定了键值对在数组中的位置。
  3. 索引计算:通过散列码与数组长度的模运算(散列码 % 数组长度)得到该键值对应在数组中的索引位置。
  4. 链表和红黑树:如果两个不同的键具有相同的散列码,它们会被存储在同一个数组索引位置对应的链表中。如果链表长度过长(默认超过8),则会转换为红黑树,以减少搜索时间。
  5. 键的唯一性:HashMap 中键的唯一性是通过 equals() 方法和 hashCode() 方法来保证的。如果两个键的 hashCode() 返回相同的值,并且 equals() 也返回 true,则认为这两个键是相同的。
  6. 扩容机制:当 HashMap 中的元素数量达到一定的阈值(容量*加载因子,默认加载因子是 0.75),HashMap 会进行扩容,即创建一个新的更大的数组,并将旧数组的内容重新计算索引并复制到新数组中,这个过程称为“rehash”。

以下是一个简化的 HashMap 插入操作代码示例:

public V put(K key, V value) {if (key == null)return putForNullKey(value); // 键为null时特殊处理int hash = hash(key.hashCode()); // 计算散列码int i = indexFor(hash, table.length); // 计算索引位置for (Entry<K,V> e = table[i]; e != null; e = e.next) {Object k;if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;return oldValue;}}addEntry(hash, key, value, i); // 添加新条目return null;
}

上述代码简化了实际的实现,但基本展示了 HashMap 的插入过程,包括散列计算、查找链表、替换旧值或添加新节点等步骤。

40. 说一下 HashSet 的实现原理?

HashSet 是 Java 中集合框架的一部分,实现了 Set 接口。它基于 HashMap 实现,用于存储无序且不重复的元素集合。以下是 HashSet 的实现原理:

  1. 存储结构HashSet 内部使用 HashMap 来存储元素。在 HashMap 中,元素以键值对(Entry)的形式存储,其中键就是我们要存储的元素本身,而值则是一个固定的常量。
  2. 哈希函数:当向 HashSet 添加一个元素时,会使用这个元素自身的 hashCode() 方法来计算它的哈希值,并通过这个哈希值来确定在哈希表中的存储位置。
  3. 碰撞处理:如果两个不同的元素具有相同的哈希值(即发生了哈希碰撞),HashSet 会利用链表(在 JDK8 中,当链表长度超过一定阈值时,会转换为红黑树)来处理这种情况。在链表或红黑树中,元素按照插入顺序进行存储。
  4. 唯一性保证:对于每个要添加的元素,HashSet 不仅仅检查其哈希值,还会调用元素的 equals() 方法来确保没有重复元素被添加。如果元素的 equals() 方法返回 trueHashSet 将不会添加这个元素。
    • 如果在对应位置上没有元素,直接添加。
    • 如果有元素,但 equals() 方法返回 false,则会添加到链表或红黑树中。
    • 如果有元素且 equals() 方法返回 true,则忽略添加操作。

以下是 HashSet 添加元素流程的简化版:

public boolean add(E e) {return map.put(e, PRESENT) == null;
}

这里的 mapHashSet 内部维护的 HashMap 实例,而 PRESENT 是一个静态的常量对象,作为所有键对应的值。

总结:

  • HashSet 基于哈希表实现,提供快速的查找、添加和删除操作。
  • 元素的唯一性由其 hashCode()equals() 方法共同决定。
  • HashSet 不保证元素的顺序,且迭代顺序可能会随着元素数量的变化而变化。

领【150 道精选 Java 高频面试题】请go公众号:码路向前 。

http://www.yidumall.com/news/21345.html

相关文章:

  • 外贸多语言网站建设网站seo案例
  • 网站设计制作的服务机构怎么把自己的产品推广出去
  • 郑州做网站服务器seo推广学院
  • 临西网站建设廊坊seo管理
  • 网站开发任务清单自己如何注册一个网站
  • 莱西网站建设营销网站设计
  • 做网站一般建多大的页面南宁网络推广外包
  • 浦东网站建设价格抖音seo优化怎么做
  • 网站备案 主体冲突查询关键词
  • 怎样用自己的pid做搜索网站学编程的正规学校
  • 汕头seo网站排名b2b免费网站推广平台
  • 做网站挣钱快又多百度seo网站在线诊断
  • 关于网站建设毕业论文8000字百度营销搜索推广
  • 做网站的公司利润率是多少企业做个网站多少钱
  • 免费申请域名做网站南昌seo优化公司
  • 物联网官网seo搜索引擎优化技术
  • ppt 做的最好的网站有哪些青岛设计优化公司
  • 商标设计logo网站seo在线教学
  • 个人免费域名空间建站火狐搜索引擎
  • 实用的企业网站优化技巧网页做推广
  • 网站推广的方式包括哪些顶尖文案网站
  • www的网站怎么申请云南网站seo服务
  • 免费网站建设资讯网上营销培训课程
  • 有哪些做批发出口的网站昆明百度推广开户费用
  • 南通网站群建设网络广告怎么做
  • 青岛知名网站建设哪家好玉林seo
  • 免费网站优化怎么做网站设计的流程
  • 帮诈骗团伙做网站属于诈骗吗搜索引擎推广的费用
  • 做网站用什么语言好网络热词缩写
  • 网站建设补充报价单网络软文是什么