哈希冲突就是不同的元素经过同一个算法算出来的哈希值相同,Java集合的解决办法是链地址法,把哈希冲突的元素放在一个链表里,链表的首元节点就是第一个添加进来的元素。其它方法有:
    开放定址法:发生哈希冲突之后,在已生成的哈希值的基础上根据一定的规则,再找一个不冲突的哈希值
    再哈希法:发生哈希冲突时,用另一个算法对所有元素再算一遍,直到不产生冲突为止
    建立公共溢出区:发生冲突的元素都放在一个地址区域。

    0904.png
    哈希碰撞/哈希冲突?怎么解决?
    首先当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞
    解决方案:
    (1)开放地址法(发生冲突,继续寻找下一块未被占用的存储地址);
    (2)再散列函数法;
    (3)链地址法,而HashMap即是采用了链地址法,也就是数组+链表的方式,简单来说HashMap由数组+链表组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的,链表出现越少,性能才会越好。
    2020/9/3
    InnoDB 和 MyISAM 的 select count()哪个更快?为什么?
    在有查询条件的时候,具体看表中数据条数。(https://blog.csdn.net/z694644032/article/details/105134631
    在没有查询条件时MyISAM更快,主要对比一下count(
    )在 InnoDB 和 MyISAM 中的实现:

    • 在 MyISAM 存储引擎中,把表的总行数存储在磁盘上,当执行 select count(*) from t 时,直接返回总数据
    • 在 InnoDB 存储引擎中,跟 MyISAM 不一样,没有将总行数存储在磁盘上,当执行 select count(*) from t 时,会先把数据读出来,一行一行的累加,最后返回总数量