集合(2)

集合(2)

内容包括:

①hashmap,②linkedhashmap,③concurrentHashMap,④hashset

map

hashMap在jdk1.8之前.

数组个链表,(链表散列).HashMap通过HashMap通过key的HsahCode经过扰动函数处理过后得到hash值,然后通过(n-1)&hash判断当前元素存放位置,(这里n指的就是数组的长度),如果当前位置存在元素的话,就判断钙元素与存入的hash值以及key是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突.
所谓的扰动函数指的就是HashMap的hash方法,使用hash方你也就是扰动函数是为了防止一些实现比较差的hashcode()方法换句话说使用扰动函数之后可以减少碰撞.

hashmap默认大小:
扩容阈值:
次幂
负载因子:
加载因子hash表:
hash表
key-value映射的个数:
key-value映射的个数
阈值:
阈值
负载因子:
装载因子
当前对象修改的次数:(remove , insert)
当前对象修改的次数
构造:
①:初始化容量大小\负载因子:
初始化容量大小\负载因子
图中的意思是初始化hashMap,指定初始化容量的大小(),指定初始化负载因子*(当你的容量达到%多少的时候开始扩容,负载因子在时间维度和空间维度,选取了一个折中值)

当负载因子等于1的时候,数据太多,copy的时候比较麻烦(根据业务要求)

&运算:
是将两个数转成二进制,然后进行运算(hash值&hash表长度-1,返回hash桶的位置)

此位置为判断是否是更新操作或者是插入操作:此位置为判断是否是更新操作或者是插入操作当你想要存入的位置中已经存有值,造成hash碰撞,先判断是否已经存在这个key,如果不存在,我们将用链表的方式进行存储,将新的元素放到hashMap中,将旧的用链表的方式连接到新的元素上,
同一个位置发生碰撞的次数越多,链表越长,hashMap的性能越差,所以我们

@底层的实现:
@为什么说重写了equise,必须重写hashcode:
1).
hashmap

在这里插入图片描述

HashMap Jdk1.8之后:

细节调整:
在这里插入图片描述红黑树的阈值:
在这里插入图片描述
最小树的容量:
在这里插入图片描述
节点用的是node表示的

HashMap死链问题 产生死链问题的原因: 高并发
避免该问题 本身不安全 不应该在高并发上使用 高并发情况应该使用ConcurrentHashMap

hashTable :(已经被淘汰)详细内容

根据业务需要进行定制:负载因子/
不能存入null 会报空指针异常

内容小结:
构造方法和静态代码块在什么时候被调的?
①构造方法和静态代码块谁的运行比较快
构造方法在new,被创建的时候运行
②静态代码块是类加载的时候运行
静态代码块的执行的顺序要高于构造方法
静态代码块new 创建对象的时候,

ider:不带有jdk
eclipse:是带有jdk的
jdk:1.7

创建兑现的5中方式:
创建对象的5种方式

克隆是创建对象的一种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值