zoukankan      html  css  js  c++  java
  • 关于hashmap

    • HashMap的底层数据结构?

    数组加键值对,数组默认都为null,新增是计算key的hash值找到数组的位置保存,下一个如果hash如果已存在,则会形成链表

    • HashMap的存取原理?

    新增,key和链表长度hash计算得出数组的位置,存放

    取值,key和链表长度hash计算得出数组的位置,如果key相等则返回,否则查询链表。

    • Java7和Java8的区别?

    jdk7 使用头插法 ,jdk 8 是尾插法,当链表超过阀值会转换成红黑树

    • 为啥会线程不安全?

    如果是1.7使用头插法,同时多个线程进行插入操作,resize会导致循环链表,就是infineloop。

    • 有什么线程安全的类代替么?

    concurrenthashmap hashtable

    • 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?

    16 保证2的幂是确保进行位运算是减少hash冲突,保证链表的均匀分布

    • HashMap的扩容方式?负载因子是多少?为什是这么多?

    默认扩张为单前数组的两倍,根据key进行重新hash分布, 0.75 过大会频繁冲突,过小会浪费内存

    • HashMap的主要参数都有哪些?

    默认初始化大小,超过会进行resize

    最大容器大小

    默认的负载因子

    转换红黑树的阀值

    取消红黑树的阀值,即当链表的数目小于这个数是转化为链表而不是红黑树

    MIN_TREEIFY_CAPACITY:链表树化的一个标准,前面说过当数组槽内的元素数量大于8时可能会转化为红黑树,之所以说是可能就是因为这个值,当数组的长度小于这个值是,会先去进行扩容,扩容之后就有很大的可能让数组槽内的数据可以更分散一些了,也就不用转化数组槽后的存储结构了。当然,长度大于这个值并且槽内数据大于8时,那就老老实实的转化为红黑树吧。

    • HashMap是怎么处理hash碰撞的?

    根据key值计算索引位置,比较key值,如果相同则覆盖并放回旧值,如果不同则存放于当前节点的下一个链表。

    • hash的计算规则?

    key  & (length-1)

  • 相关阅读:
    lazyload【思路】
    图片旋转
    模拟滚动条【大体功能实现】
    Firefox window.close()的使用注意事项
    修改KindEditor的CSS文件
    ownerDocument property
    网易新闻图片展示效果
    关于td不支持position问题
    strcat strncat
    Tcl_FindExecutable
  • 原文地址:https://www.cnblogs.com/chenyangwang/p/13386630.html
Copyright © 2011-2022 走看看