zoukankan      html  css  js  c++  java
  • HashMap

    HashMap是最快的数据结构。

    根据key直接算出它的下标位置。

    map是查找表。

    1.put方法

    2.对键值k进行散列算法

    就是k.hashcode()。

     HashMap可能会出现的问题

    在put的时候

    两个键的hashcode()的值是一样的。

    键值对就是Entry

    Entry:有三个变量

    key

    value

    Entry.next记录下一个元素是谁。

    出现链表是会降低查询效率。

    如果使用java提供的类作为Key,不同对象不会出现相同hashCode()。

    hashcode和equals都是object的方法。在重写equals时也要重写hashcode()

    在Object定义的时候,hashcode和equals是满足hashmap的使用规则的。

     HashMap用散列桶来存储数据。

    HashMap默认的初始值是16.

    Size:大小,当墙散列表中存储数据的数量。

    加载因子:实际存储数据数量和总共能够存储数据数量的大小。

    Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小。

    性能优化:加载因子较小时,散列查找性能会提高,同时也浪费了散列桶空间容量。0.75

    size永远不会超过Capacity*0.75.

    散列算法会带入两个参数:hashcode值和数组长度。当数组长度变了以后,散列值也会发生变化。

    所以每次数组容量改变一次,每个数据的散列值都发生了改变。

    为了避免产生链表使用了加载因子,数组容量一旦发生改变,会发生rehash,尽量避免数组少扩容。

    HashMap有带有数组容量的构造方法。

    HashMap最重要的特点:快。

    HashMap要注意的就是:避免产生链表。

    可能还要注意数组容量发生变化的情况。

    什么情况会产生链表?

    1.作为key的hashCode()和equals方法要重写。

    2.存的数据只能占总容量的四分之三。

    HashMap中与存的数据顺序不一样。

    它有一个LinkedHashMap使用链表记录数据顺序。

    字符串比较相等一定要用equals(),绝对不能用==。

    还有写代码一定要用缩进。

  • 相关阅读:
    AcWing 199. 余数之和
    AcWing 295. 清理班次
    AcWing 294. 计算重复
    Acwing 393. 雇佣收银员
    AcWing 362. 区间
    AcWing 361. 观光奶牛
    CSP-S 2019 Emiya 家今天的饭
    CSP-S 2019游记
    AcWing 345. 牛站 Cow Relays
    java 环境配置
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9634070.html
Copyright © 2011-2022 走看看