JAVA Set HashSet Map HashMap

1 Map接口

1.1 概述

Java.util接口Map<k,V>

类型参数:K -表示此映射所维护的键V -表示此映射所维护的对应的值

也叫做哈希表,散列表,常用于键值对结果的数据,其中键不能重复,值可以重复√在这里插入图片描述

1.2 特点

   1. Map可以根据键来提取对应的值

   2. Map的键不允许重复,如果重复,对应的值会被覆盖

   3. Map存放的都是无序的数据

   4. Map的初始容量是16,默认的加载因子是0.76 

在这里插入图片描述

 

1.3  继承结构

在这里插入图片描述 

1.4 常用方法

学习Map接口中的方法即可

 

在这里插入图片描述

2  HashMap

2.1 前言

HashMap的键要同事重写hashCode()和equlas()

hashCode()用来判定二者的hash值是否相同,重写后根据属性生成

equlas()用来判断属性的值是否相同,重写后,根据属性判断

-equlas()判断数据如果相等,hashCode()必须相同

-equlas()判断数据如果不等,hashCode()尽量不同

2.2 HashMap的存储过程:

   1. HashMap的结构是数组+链表 或者 数组+红黑树的形式

   2. HashMap底层的Enty[]数组,初始容量为16,加载因子是0.75f,扩容按约为2倍扩容

   3. 当存放数据时,会根据hash(key)%算法来计算数据的存放位置,n就是数组的长度,其实也就是结合的容量

   4. 当计算到位置之前没有存过数据的时候,会直接存放数据

   5. 当计算的位置,有数据时,会发生hash冲突/hash碰撞

       解决的方法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素

       也就是说数组中的元素都是最早假如的节点

   6. 如果链表的长度>8时,链表会转为红黑树,当链表的长度<6时,会重新恢复成链表

在这里插入图片描述 

3 Set接口

在这里插入图片描述 

3.1 概述

      1. Set是一个不包含重复数据的Collection

      2.Set集合中的数据是无序的(因为Set集合没有下标)

      3. Set集合中的元素不可以重复-常用来给数据去重

3.2 Set集合的特点

     1. 数据无序且数据不允许重复

     2. HashSet:底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复

     3. TreeSet: 底层是TreeMap,也是红黑树的形式,便于查找数据

3.4 HashSet

3.4.1 概述

 底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null

在这里插入图片描述

在这里插入图片描述 

4 HashMap扩容

成长因子:

static final float DEFAULT_FACTOR=0.75f;

前面的讲述已经发现,当你空间只有仅仅为10的时候是很容易造成2个对象的hashcode所对应的地址是一个位置的情况。这样就造成2个对象会形成散列桶(链表)。这时就有一个加载因子 的参数,默认值为0.75,如果你HashMap的空间有100那么当你插入了75个元素的时候HashMap就不需要扩容了,不然的话会形成很长的散列桶结构,对于查询和插入都会增加时间,因为它要一个一个的equals比较。但有不能让加载因子很小,如0.01,这样显然是不合适的,频繁扩容会大大消耗你的内存。这时就存在着一个平衡,JDK中默认是0.75,当然负载因子可以根据自己的实际情况进行调整。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员黑马二代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值