Day_18 散列表、泛型

1. Set

1.1 HashSet 使用

创建对象

添加操作

 

元素个数

判断是否为空

 

2. 散列表

2.1 概述

散列表结构 可以理解为数组中保存的是链表的首字节,用来保存k和v 键值对操作

hash算法 : 是一种安全的加密机制,可以把不定长的数据转化为定长数据,并且不能保证其唯一性,又叫哈希冲突          在Java中 指的就是hashCode方法

对一个对象生成多次hash值,值一定想同,多个对象也可能生成相同的hash值,叫hash冲突

k不可重复,v可重复

添加过程 :

1. 根据要添加的key,调用它的hashCode方法,生成hash值

2. 通过一定的算法,根据hash值生成数组的下标

3. 判断该下标中,是否有数据,如果没有数据就把该键值对映射关系保存到数组中

4. 如果该下标中有数据,则调用key的equals方法,和对应的所有数据进行比较,如果不相等,则添加到链表的尾部即可

5. 如果对应的链表中,通过equals方法比较的时候,发现相同的数据,key不再添加,value替换

通过添加过程得知,会自动调用该对象的hashCode和equals,所以在保存自定义类型的时候,需要注意方法覆写

 2.2 HashSet

 

可看出来,当我们使用HashSet的时候,其实就等于是再使用HashMap 

添加数据的时候,虽然调用的是HashSet的add方法,但是本质还是调用map的put方法

而 map中 需要保存的是k和v映射关系,所以在set中有一个变量保存了value的值

所以我们再进行set添加的时候,只操作了map中的key,value值我们不再关心

3. Map

Map 是无序的,并且保存的是k-v键值对映射关系,其中K不可重复,V可重复

HashMap : 底层是散列表

TreeMap : 底层是红黑树,元素必须按照一定的规则进行排序

 映射关系 : 比如 商品 和 购买数量,或者数据统计

3.1 HashMap

创建对象

添加k-v

 

元素个数

 

获取

 

判断是否包含

 

删除

 

获取所有value

 

 

 entrySet()

3.2  继承体系

3.3 TreeMap

TreeMap 保存的元素会按照一定规则进行排序,底层是红黑树

 

 

 

 4. 泛型

泛型 : 在编译过程中检测数据类型是否匹配

泛型 必须是引用类型,不能使用基本类型

优点 : 统一了数据类型,减少了类型转换

 缺点 : 只能保存同一种类型

 定义泛型,使用大写字母A-Z表示,写什么都一样,都只是占位符而已,只不过 某些字符也有一些特殊的含义

E : Element 一般代表元素,而集合中的数据 我们叫元素,所以在集合中出现的泛型一般使用E表示

K : Key 表示键

V : value 表示值 K和V一般在散列表中出现(Map)

T : Type 表示一个java类型

N : 表示Number

如果规定了泛型,但是使用的地方没有指定泛型,则默认为Object类型

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值