• HashMap实现原理


    大神地址 https://blog.csdn.net/vking_wang/article/details/14166593

    数据表结构中

    数组:

    数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;

    链表:

    链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

    于是诞生了哈希表,同时使用了链表和数组。

    hashMap就是使用了哈希表。

    数据占用哪个数组,通过key的hash 前16位与后16位异或得到的值(为了将值分散),再将值与数组长度做与运算(与运算比取模效率更高)

    当链表长度大于8时,链表转为红黑树(jdk1.8)

    为了更快的查询数据,同时为了减少不必要的浪费空间,当map里的数据个数达到 容量(默认16)*扩容因子(默认0.75) 的个数时,开发扩容,将table的长度扩大一倍(左位移1位)

    这是为了查询速度,与尽量不浪费空间的经验值比例

  • 相关阅读:
    Linux文件及目录查找
    英语单词independent
    英语单词omitting
    英语单词deploy
    英语单词debug
    线程
    进程
    操作系统历史
    分布式爬虫
    爬虫基础
  • 原文地址:https://www.cnblogs.com/jaxlove-it/p/9799400.html
Copyright © 2020-2023  润新知