zoukankan      html  css  js  c++  java
  • HashMap基础知识

    1.HashMap的特性

      HasMap 存储键值对实现快速存取,允许为null,key值不能重复,key重复则覆盖

      非同步线程不安全

           底层是hash表,不保证有序

    2.HashMap实现原理

      JDK1.8底层采用数组+链表+红黑树的数据结构,我们通过put和get存储和获取对象,当我们给put方法传递键和值时,会对键先做一个hashCode计算来的到它在buckset数组中的位置来存储Entry对象,当获取对象时,通过get获取buckset的位置,在通过键对象的equals方法找到正确的键值对,然后返回值对象。

    3.HashMap put实现过程

      计算key的hashcode的值然后拿值的高16位做异或运算,如果散列表是空时,调用resize初始化散列表

      如果没有发生碰撞,直接添加元素到散列表中,如果发生了碰撞(hashcode相同) 如果key的地址相同或者equals的内容相同,则替换旧值

      如果是红黑树结构,就直接调树的插入方法

      如果是链表结构,循环遍历直到链表中某个节点为空,使用尾插法插入,插入后判断链表个数是否达到变成红黑树的阀值8

        如果桶满了大于阈值 负载因子0.75  则resize 进行扩容

      

      

  • 相关阅读:
    range用法(倒序取值)
    set操作
    map集合 可变对象
    元组
    list操作
    列表推导式、字典推导式、集合推导式
    调用父类方法
    谷歌浏览器真机调试的方法
    css3 flex弹性盒自动铺满写法
    微信小程序保存海报的方法
  • 原文地址:https://www.cnblogs.com/qi2332356/p/14630189.html
Copyright © 2011-2022 走看看