java教程散列表和树所对应容器类及HashMap解决冲突学习

 更新时间:2021年10月08日 10:48:03   作者:chuangjizai7518  
本篇篇文章是java教程,主要介绍了java教程散列表,树所对应容器类及HashMap解决冲突的学习,有需要的朋友可以借鉴参考下,希望能够有所帮助

java中散列表、树所对应的的容器类

散列表:hashmap,hashtable,concurrentHashmap

树:hashset,treemap,treeset

jdk7与jdk8中HashMap的区别

jdk7中hashMap采用数组+链表,如果过多的节点在hash时发生碰撞,如果要查找其中一个节点,需要O(n)的查找时间。

jdk7中hashMap采用数组+链表/红黑树,当某个桶位达到某个阈值时,链表将转化为红黑树,红黑树时间复杂度O(nlogn)

HashMap如何解决冲突

1.开放定址法: 通过探测算法,当一个槽位已经被占用情况下继续查找下一个
2.链地址法(数组+链表)
3.再哈希 准备多个散列函数,当发生冲突时,再选择一个散列函数进行散列。

HashMap的工作原理

HashMap 底层是数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry<K,V>接口)实现,HashMap 通过 put & get 方法存储和获取。

HashCode是定位(存储位置),equals是定性(两者是否相等)

1.存储对象时,将K/V传给put()方法:

2.hash(K)计算K的hash,结合数组长度,计算数组下标

调整数据大小(当容器中的元素个数大于 capacity * loadfactor 时,容器会进行扩容resize 为 2n)

3.三种情况:

  • 当K的hash值不在HashMap中,则执行插入
  • 当K的hash值存在HashMap中,发生碰撞
       它们两者equals为true,更新键值对
       它们两者equals为false,插入链表尾部或红黑树(当链表长度超过8)中

获取对象时(get方法):

  • 调用hash(K),计算K的hash值从而获取数组的下标
  • 顺序遍历链表,equal方法查找相同 Node 链表中 K 值对应的 V 值

转载于:https://my.oschina.net/u/3973793/blog/3100006

以上就是java教程散列表和树所对应容器类及HashMap解决冲突学习的详细内容,更多关于java散列表树所对应容器类及HashMap解决冲突的资料请关注脚本之家其它相关文章!

相关文章

  • 基于IDEA,Eclipse搭建Spring Boot项目过程图解

    基于IDEA,Eclipse搭建Spring Boot项目过程图解

    这篇文章主要介绍了基于IDEA,Eclipse搭建Spring Boot项目过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java开发环境配置方法

    Java开发环境配置方法

    这篇文章主要介绍了并不是每一台计算机都可以运行Java程序,要运行Java程序,计算机必须学习搭建Java开发环境,需要的朋友可以参考下
    2015-07-07
  • SpringBoot配置文件格式详细介绍

    SpringBoot配置文件格式详细介绍

    这篇文章主要为大家详细介绍了SpringBoot配置文件格式,文中的示例代码讲解详细,对我们学习SpringBoot有一定帮助,需要的可以参考一下
    2022-09-09
  • 深入理解Java中的EnumMap和EnumSet

    深入理解Java中的EnumMap和EnumSet

    这篇文章主要介绍了深入理解Java中的EnumMap和EnumSet,一般来说我们会选择使用HashMap来存储key-value格式的数据,考虑这样的特殊情况,一个HashMap的key都来自于一个Enum类,这样的情况则可以考虑使用本文要讲的EnumMap,需要的朋友可以参考下
    2023-11-11
  • 基于Java设计一个短链接生成系统

    基于Java设计一个短链接生成系统

    相信大家在生活中会收到很多短信,而这些短信都有一个特点是链接很短。这些链接背后的原理是什么呢?怎么实现的?小编今天就带你们详细了解一下
    2021-12-12
  • 基于SSM框架实现简单的登录注册的示例代码

    基于SSM框架实现简单的登录注册的示例代码

    这篇文章主要介绍了基于SSM框架实现简单的登录注册的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • java中TCP实现回显服务器及客户端

    java中TCP实现回显服务器及客户端

    本文主要介绍了java中TCP实现回显服务器及客户端,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 基于java中两个对象属性的比较

    基于java中两个对象属性的比较

    下面小编就为大家带来一篇基于java中两个对象属性的比较。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java使用modbus4j实现modbus tcp通讯

    Java使用modbus4j实现modbus tcp通讯

    Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议,本文主要介绍了java如何使用modbus4j实现modbus tcp通讯,感兴趣的可以了解下
    2023-12-12
  • 如何使用IDEA从SVN服务端检出项目

    如何使用IDEA从SVN服务端检出项目

    这篇文章主要介绍了如何使用IDEA从SVN服务端检出项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论