java 集合

hashmap 数据结构

java 1.8 之前:

java hashmap 的数据接口 为 数组+链表的接口

java8 以后:

hashmap 做了相关的优化 ,当链表 高度 为8 ,数据长度扩容到64,
链表转成 红黑树,长度低于6红黑树转换为 链表。

concurrentHashMap
map 带排序的集合

TreeMap:

默认按照key 排序的 map集合,底层使用的二叉树,内置比较类对象可以对元素进行排序。

HashSet

看看源码

在这里插入图片描述我们new hashSet 对象的时候实际上创建 一个hashMap

set 集合实际上就是Map 集合 key 部分

所以 hashset 有Map相关的属性。

HashSet是通过HashMap来实现的,HashMap通过hash(key)来确定存储的位置,是不具备存储顺序性的,因此HashSet遍历出的元素也并非按照插入的顺序。

currentHashMap

https://blog.csdn.net/qq_22343483/article/details/98510619

CopyOnRightList

TreeSet

hash冲突

hash 散列函数,就是给出不同长度的值,会存储在固定长度的hash值上面,这个存储值得下标组合就是散列表,hashcode 就是 散列表存储地址

如果hashcode相同,标记着同一个存储地址,这个就是hash 冲突。

hash冲突的处理办法

拉链法:

jdk1.8之前的版本 中的 hashMap 采用就是这种数据结构,具体的实现就是 在hash 冲突产生时,在冲突的的位置增加一个单项链表,将hashcode的值对应的内容存储在那个链表中

开放地址法:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止

多重哈希法
当出现hash冲突的时候,重新计算,直到找到不冲突的位置

公共溢出法
哈希冲突产生,另创建一张hash表,用来存储hash 冲突的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值