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

湖北做网站价格百度推广怎么做步骤

湖北做网站价格,百度推广怎么做步骤,设计师工作室网站,织梦cms下载HashMap是Java语言中的一个重要数据结构,它实现了Map接口,允许我们存储键值对,并且可以根据键直接访问对应的值。 特性 键值对存储:HashMap存储的是键值对数据,可以方便的通过键来获取值。无序:HashMap中…

HashMap是Java语言中的一个重要数据结构,它实现了Map接口,允许我们存储键值对,并且可以根据键直接访问对应的值。

特性

  1. 键值对存储:HashMap存储的是键值对数据,可以方便的通过键来获取值。
  2. 无序:HashMap中的元素没有顺序,每次输出的顺序都可能不一样。这是因为HashMap内部是通过哈希表来实现的,元素存储在哈希表中,其位置取决于键的哈希值。
  3. 允许null键和null值:HashMap允许一个null键和一个null值。
  4. 扩容:当HashMap中的元素数量达到一定的阈值(默认是桶(bucket)的个数,每个桶是一个链表或者红黑树)时,会进行扩容,扩容会导致原有的数据重新计算哈希值并重新放置

HashMap的工作原理

HashMap的工作原理主要涉及以下几个部分:

  1. 哈希函数:当我们将键值对插入到HashMap中时,HashMap会使用哈希函数(hash function)将键(key)转换成一个哈希码(hash code),这个哈希码用来确定键值对应该放在哪个桶(bucket)中。
  2. 桶和链表:在HashMap中,每个桶都是一个链表,链表中的每个节点都包含一个键值对。如果多个键哈希到同一个桶,那么这些键值对就会在链表中顺序存储。
  3. 扩容和再哈希:当某个桶中的链表长度超过一个阈值(例如8)时,HashMap会将这个桶拆分成两个或更多的桶,这个过程就叫做扩容。扩容会使得HashMap的内部数据结构发生变化,可能会导致查询性能下降。
  4. 红黑树:当某个桶中的链表长度超过一定阈值(例如16)时,链表会转化成红黑树以提高查询效率。

源码

public class HashMap<K,V> extends AbstractMap<K,V>  implements Map<K,V>, Cloneable, Serializable {  // 其他常量  /**  * The default initial capacity - MUST be a power of two.  */  static final int DEFAULT_INITIAL_CAPACITY = 16;  /**  * The load factor used when none specified in constructor.  */  static final float DEFAULT_LOAD_FACTOR = 0.75f;  /**  * The table, resized as necessary. Length MUST Always be a power of two.  */  transient Node<K,V>[] table;  /**  * The number of key-value mappings contained in this map.  */  transient int size;  /**  * The next size value at which to resize (capacity * load factor).  */  transient int threshold;  /**  * The load factor for the hash table.  When the capacity is multiplied by  * this factor, it is incremented.  */  transient float loadFactor;  // 其他变量和方法  
}

其中,HashMap的核心是它的哈希表(由table数组实现),每个元素都是一个Node对象,其中包含键值对。HashMap还维护了一些其他变量,如size(映射数量)、threshold(下一次扩容的阈值)和loadFactor(哈希表的加载因子)。

HashMap的主要方法包括:构造函数、put(插入键值对)、get(获取键对应的值)、remove(删除键值对)、isEmpty(判断是否为空)等。其中,put和get方法是HashMap中最常用的方法,它们的实现涉及到哈希表的查找和插入操作。以下是put方法的源码:

public V put(K key, V value) {  return putVal(hash(key), key, value, false, true);  
}  final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {  Node<K,V>[] tab; Node<K,V> p; int n, i;  if ((tab = table) == null || (n = tab.length) == 0)  n = (tab = resize()).length;  if ((p = tab[i = (n - 1) & hash]) == null) { // ①如果哈希表为空,将当前元素插入到第一个位置。p为null。则直接在第一个位置插入元素。同时n++。  tab[i] = new Node<>(hash, key, value, null); // 创建新的节点插入到哈希表中。同时n++。如果超过阈值,则进行扩容。并重新计算哈希值和位置。并将元素插入到新的位置中。同时n++。如果超过阈值,则进行扩容。并重新计算哈希值和位置。
}}

如果哈希表已经满了,那么会进行扩容,即创建一个新的哈希表,大小是原来的两倍,并将原来哈希表中的所有元素重新插入到新的哈希表中。扩容会导致性能的损失,因为每次插入操作都需要重新计算元素的哈希值和位置。因此,在设计HashMap时,需要考虑哈希表的大小和加载因子,以平衡性能和内存使用。

在插入元素时,如果哈希表中已经存在相同的哈希值,那么会进行冲突处理。HashMap采用链表或红黑树来处理冲突。当冲突发生时,会将当前元素插入到链表的尾部或红黑树的叶节点上。当链表的长度超过一定阈值(如8)时,会将链表转换为红黑树,以提高查询效率。

在查询元素时,HashMap会根据给定的键计算出哈希值,并找到对应的桶。然后,在该桶中查找链表或红黑树,直到找到对应的元素或到达链表的尾部或红黑树的叶节点。如果找不到指定的元素,则返回null。

总之,HashMap是一种高效的键值对存储数据结构,通过哈希表实现了O(1)时间复杂度的插入、删除和查询操作。但是,由于哈希表的不确定性,HashMap不支持线程安全。如果需要线程安全,可以使用ConcurrentHashMap或者通过Collections.synchronizedMap方法将Map包装为线程安全。

除了基本的操作,HashMap还提供了其他一些有用的方法,例如:

  1. containsKey(Object key):判断指定键是否在Map中,存在则返回true。
  2. containsValue(Object value):判断指定值是否在Map中,存在则返回true。
  3. get(Object key):返回指定键对应的值,如果键不存在则返回null。
  4. putAll(Map<? extends K,? extends V> m):将指定Map中的所有映射复制到此Map中。
  5. remove(Object key):移除指定键及其关联的值。
  6. size():返回Map中键-值映射关系的数量。
  7. isEmpty():测试此Map是否为空。
  8. keys():返回包含此映射中所有键的迭代器。
  9. values():返回包含此映射中所有值的迭代器。
  10. entrySet():返回包含此映射中所有映射关系的Set视图。

此外,HashMap还提供了其他一些参数来控制其行为,如初始容量、加载因子等。可以通过构造函数或者相关方法来设置这些参数。

总之,HashMap是一个非常实用的数据结构,适用于需要快速查找和插入键值对的情况。但是,需要注意的是,由于HashMap的不线程安全性,如果在多线程环境下使用,可能会导致数据的不一致性问题,需要使用线程安全的数据结构或者通过Collections.synchronizedMap方法进行包装。

http://www.tj-hxxt.cn/news/11693.html

相关文章:

  • 高安做网站互联网推广与营销
  • matlab做网站买卖链接网站
  • 独立站和企业网站区别单页网站怎么优化
  • 个人博客网站制作论文西安seo教程
  • 网站佣金怎么做会计分录广西seo关键词怎么优化
  • 知名网站建设网络营销品牌有哪些
  • 江津做网站班级优化大师下载安装最新版
  • 怎么做外链seo分析报告
  • 营销网站建设设计百度搜索竞价推广
  • php做直播网站购买域名的网站
  • 厚瑜网站建设广告投放怎么做
  • 公司网站被抄袭站长统计推荐
  • 手机网站制作价格济南百度推广优化
  • 项目工程监理公司网站建设方案外贸推广
  • 开发公司资质质量体系北京seo运营
  • 南通网站建设推广石家庄网络营销
  • 做愛視頻网站班级优化大师怎么加入班级
  • 网站开发怎样建立后台数据seo技术306
  • 监理建设协会网站福州百度seo代理
  • 电子商务网站建设流程seo搜狗
  • 网站域名服务错误怎么营销自己的产品
  • 网站做图分辨率无锡营销型网站制作
  • 临沂河东建设局网站苏州网站建设费用
  • 绵阳最有实力的公司网站建设搜索引擎推广方案案例
  • 网站设计开题报告范文一级造价工程师
  • 一个专门做熊的网站seo哪里可以学
  • 用asp.net做企业网站企业站seo报价
  • 网站对齐原则谷歌商店下载
  • 网站封了给个能用的seo网站推广技术
  • 做一个企业网站需要多长时间风云榜