成都创新互联网站制作重庆分公司

HashMap解惑-创新互联

HashMap中有一些我们容易忽视的点,

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站设计、新蔡网络推广、小程序制作、新蔡网络营销、新蔡企业策划、新蔡品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联公司为所有大学生创业者提供新蔡建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

Java代码  HashMap解惑

  1. public V put(K key, V value) {

  2.         if (table == EMPTY_TABLE) {

  3.             inflateTable(threshold);

  4.         }

  5.         if (key == null)

  6.             return putForNullKey(value);

  7.         int hash = hash(key);

  8.         int i = indexFor(hash, table.length);

  9.         for (Entry e = table[i]; e != null; e = e.next) {

  10.             Object k;

  11.             if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {

  12.                 V oldValue = e.value;

  13.                 e.value = value;

  14.                 e.recordAccess(this);

  15.                 return oldValue;

  16.             }

  17.         }

  18.         modCount++;

  19.         addEntry(hash, key, value, i);

  20.         return null;

  21.     }

 由上述代码知道,hash值是用来确定bucketIndex,equals是用来和链表上的值比较,因此对于key是自定义的类,强烈建议重写hashCode和equals方法。

 再看如下代码下载

Java代码  HashMap解惑

  1. void addEntry(int hash, K key, V value, int bucketIndex) {

  2.         if ((size >= threshold) && (null != table[bucketIndex])) {

  3.             resize(2 * table.length);

  4.             hash = (null != key) ? hash(key) : 0;

  5.             bucketIndex = indexFor(hash, table.length);

  6.         }

  7.         createEntry(hash, key, value, bucketIndex);

  8.     }

 if条件告诉我们rehash的条件要同时满足两个:map中元素个数不小于阀值即容量*负载因子,对应的bucketIndex处有元素。

 另外,如下代码作备忘,

Java代码  HashMap解惑

  1. static int indexFor(int h, int length) {

  2.         // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";

  3.         return h & (length-1);

  4.     }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:HashMap解惑-创新互联
转载源于:http://cxhlcq.com/article/degcsj.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部