HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处

HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第1张图片
image.png

这节我们学习一下HashMap(他也是线程不安全的) 它是存在于Map集合接口下面的一个具体实现类
HashMap依赖我们的Map接口 在用的时候一般不直接写HashMap而是通过Map来写
Map是以键值对形式存在的 支持泛型
代码如下(MyIndex)


image.png

运行结果


HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第2张图片
image.png

HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第3张图片
image.png

HashMap是一个数组和链表的合体 其内部有一个数组也有一个链表 同时处理我们的key和value
HashMap里面的键值对 key不可以重复 value可以重复 如果存在相同的key value不同则会覆盖第一个value值 而key保持不变(唯一)
代码如下(MyIndex)
image.png

运行结果
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第4张图片
image.png

只会出现一次bhc 因为key相同
代码改变一下 key相同 value不同


image.png

运行结果
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第5张图片
image.png

下面的覆盖了上面的
接下来学习一下如何获取键值
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第6张图片
image.png

运行结果
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第7张图片
image.png

接下来我们学习一下Set集合
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第8张图片
image.png

我们从上图可以看见它下面的具体实现类 我们先看一下Hashset(其内部是基于HashMap实现的)
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第9张图片
image.png

打印结果
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第10张图片
image.png

我们能否加入一个对象让其不重复呢?仅仅加入字符串不刺激 这个对象可以是我们自定义的业务对象
为了模拟功能 我们创建一个类叫做Product 代表我们的商品
目录如下
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第11张图片
image.png

代码如下


HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第12张图片
image.png

通过alt+insert生成 两个商品属性提前写好
然后修改MyIndex代码如下
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第13张图片
image.png

运行结果
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第14张图片
image.png

结果显示两次101_java book 并没有区分出来 表示无法区分两个是一致的
这是为什么呢?
我们来看下源码 hashset的 里面有个hashCode hashSet右面有个add方法 里面有put方法 下面有个hash方法 里面有hashcode
hashCode是通过一定的算法计算出的散列值 在putVal函数中判断了key是否存在,如果存在,则进行覆盖
所以接下来我们需要对Product进行是否重复的判断
因为如果我们在set集合中传入的是字符串可以比对出值是否相等 但是传入一个对象是无法对比值是否相等的
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第15张图片
image.png

但是如果想比较加入自定义对象怎么办呢?
这时候需要重写equals方法和hashcode方法
然后系统才可以判断我们的这两个对象是否相等
Product里面代码如下
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第16张图片
image.png

由于我们重写了上面的两个方法 并对对象是否相等进行了业务上的处理
运行结果如下
HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处_第17张图片
image.png

可以看出就不会加入key值一样的数据了
hashcode的作用还可以用于后台数据库中新闻标题和内容进行重复判断 我们可以返回一个int行的hash值加上标题和内容组合而成的hash值判断是否重复

你可能感兴趣的:(HashMap和HashSet 学会瞄一眼源码 hashcode的数据库用处)