> 文章列表 > Java实战开发中的Map集合KEY

Java实战开发中的Map集合KEY

Java实战开发中的Map集合KEY

好,让我们来仔细看看自定义的k类型。

如果你不太明白是什么意思,让我们来看看这个例子。

在使用我们的Map集合时,任意的数据类型都可以成为我们的k,也就是说可以成为我们所谓的k类型。比如,我们现在来看一个例子。假设我们的操作代码中,我们跟上一个Book,我们将它命名为title,然后我们现在这个地方什么都不干了,我们就跟上title。于是,现在我们的操作代码针对这次点title,等于叫做title。

好了同学们,我在这里写了一个自定义的类型,这个book是自己写的。往后呢,我希望这个程序可以在这里跟上我们的book,即将Book类的对象作为key,而后呢,死缀的话呢作为我们的value。同学们,这个过程是完全反过来的,相当于此时作为我们key的类型为一个自定义位。

好,完成之后呢,让我们再找到Pro的方法。我们现在跟上new book,比如说我们现在叫做加我,我们从入门到项目实战,完成之后呢,咱们第二步,我们现在搁到这个地方,对应的是我们叫做Java小红书。同学们,咱们大家写的小红书,既然我在之前呢都能根据k获取数据,那么现在我们看一看,能不能通过它来获取数据呢?

我们紧接着这个大码搁到这,里面咱们来执行一下,我们来看一下最终的效果是什么。咱们现在来执行看结果,大家会发现只是空,也就是说,这个自定义的这个k类型的k不能作为这个正常使用。

不过,同学们看这里,如果你确定要用这种自定义的数据类型作为k的话,那么这个作为k的类型同学们注意啊,一类作为key的这个造度是为一定要在类中复写object中的哈西扣的和1扣4的两个方法。

为什么呢?因为这个所谓的key查找数据,实际上呢就需要判断进行我们对象重复的判断,而他的判断依据就是说先根据哈西扣的找数据,而后再根据依扣死对数据内容进行比对。

好,现在我们给他直接进行一个复写操作,然后我们再来看一下执行结果,我们就加了2个方法之后,大家看对面这个地方,能不能获得我们对应的信息?

所以咱们现阶段的话,我们就成功的实现了自定义类作为key的存在。但是,我们要理智性的给大家做一个分析啊,同学们千万记住,首先呢,我们整个的这个叫做处理操作之中,我们不用这种机制,而是说这个地方呢,会有一个小小的问题。

同学们听我说,实现归实现,但是用不用的话,咱们就得理智来分析了。为什么这么说呢?我们大家看这里面啊,需要提醒我们所有读者的是,虽然在我们叫做Java里面允许用户创建属于自己的一个叫做key的类型,但是呢考虑到实际的项目的开发来说,一般作为我们卖谱中k类型的我们只有叫做说两大种类型,只有这个这么说三类吧。只有三个类型,一个是死缀,第二个是integer或者其实叫做是one,也就是说我们才是显示三种位。比如我们现在回到这个大码中,我们现在呢用的是自定义位,但是我在自定义位的时候,我在这跟上了一个1。

同学们大家看这边,所有的我们不可谓的对象,所有不可谓的一个叫对象的,我们的哈西马,哈西马同学们全部相同,都一样了。那如果说现在都一样的话呢,那他现在能不能正常查询呢?我们不太清楚。于是呢,咱们现在再来验证一下,我们能不能查到所需要的数据呢?大家发现哎,老师你不是也能够查到这个数据吗?那这个地方为什么你能查到数据?他的哈西马不正确呀。

我们要知道,所有保存在我们这个哈西卖部中的这个数据,他都要用哈西来处理,而这个哈西方法,他内部主要就是基于我们叫做哈西扣的方法来实现的。所以呢,我们现阶段呢就出现了一个问题,就是说在整个的操作过程里面啊,如果现在假设你说现在我用的是自定义位,我没有用这个死转integer或望这几个问题,这几个位一般不会出现哈奇重复,但如果说现在我真的在整个代码之中,我们用的是自定义类,并且真真正正的出现了哈西重复的话,那这个问题怎么解决呢?

好比如说咱们现在回到这个大码中,咱们看这里啊同学们,这个程序大码是咱们之前见到的。所以,我们需要提出这个问题,即在我们进行卖谱数据存储的时候,如果我们的哈西值重复了该怎么办呢?好的,让我们来仔细看看自定义的k类型。

如果你不太明白是什么意思,让我们来看看这个例子。

在使用我们的Map集合时,任何数据类型都可以成为我们的k,也就是说可以成为我们所谓的k类型。比如,我们现在来看一个例子。假设我们的操作代码中,我们与一个Book 对象交互,我们将它命名为 title,然后我们现在不做任何操作,我们就跟上 title。于是,现在我们的操作代码针对这次取 title,等于叫做 title。

好了同学们,我在这里写了一个自定义的类型,这个 book 是自己编写的。往后呢,我希望这个程序可以在这里跟上我们的 book,即将 Book 类的对象作为 key,而后呢,死缀的话呢作为我们的 value。同学们,这个过程是完全反过来的,相当于此时作为我们 key 的类型为一个自定义类型。

好,完成之后呢,让我们再找到问题的根源。我们现在跟上 new Book,比如说我们现在叫做 "Java从入门到项目实战",完成之后呢,我们现在暂停到这个地方,对应的是我们叫做 "Java小红书"。同学们,我们大家写的小红书,既然之前我都能根据 key 获取数据,那么我们现在看一看,能不能通过它来获取数据呢?

我们紧接着将这段代码放到这里,里面我们来执行一下,我们来看一下最终的效果是什么。我们现在来执行看结果,大家会发现只是空,也就是说,这个自定义的 k 类型的 k 不能正常使用。

不过,同学们看这里,如果你确定要用这种自定义的数据类型作为 k 的话,那么这个作为 k 的类型同学们注意啊,一定要在类中重写 object 中的 hashCode 和 equals 两个方法。

为什么呢?因为这个所谓的 key 查找数据,实际上需要进行对象重复的判断,而判断依据就是先根据 hashCode 找数据,再根据 equals 对数据内容进行比对。

好,现在我们进行了重写操作,然后我们再来看一下执行结果,我们就加了 2 个方法之后,大家看对面这个地方,能不能获得我们对应的信息?

所以我们现阶段的话,我们成功地实现了自定义类作为 key 的存在。但是,我们要理智地给大家做一个分析,同学们千万记住,首先呢,在我们整个处理操作之中,我们不必使用这种机制,而是说会有一个小小的问题。

同学们听我说,实现归实现,但用不用的话,我们就得理智地来分析了。为什么这么说呢?我们大家看这里面啊,需要提醒我们所有读者的是,虽然在 Java 里面允许用户创建属于自己的一个叫做 key 的类型,但是考虑到实际的项目开发来说,一般作为我们 Map 中的 k 类型的我们只有三种类型,只有三个类型,一个是 String,第二个是 Integer 或者其实叫做 Long,也就是说我们才是显示三种类型。比如我们现在回到这个大码中,我们现在用的是自定义类型,但是我在自定义类型的时候,我在这跟上了一个 1。

同学们大家看这边,所有保存在我们 Map 中的对象,他们的 hashCode,也就是哈希码全部相同,都一样了。那如果说现在都一样的话呢,那它现在能不能正常查询呢?我们不太清楚。于是呢,我们现在再来验证一下,我们能否查到所需要的数据呢?大家发现哎,老师你不是也能够查到这个数据吗?那这个地方为什么你能查到数据?它的 hashCode 不正确啊。

我们要知道,所有保存在我们 Map 中的数据,都要用 hashCode 来处理,而 hashCode 方法,他内部主要就是基于我们叫做 hashCode 的方法来实现的。所以呢,我们现阶段呢就出现了一个问题,就是说在整个的操作过程里面啊,如果现在假设你说现在我用的是自定义类型,我没有用这个转换成 Integer 或者 Long 的两个问题,这两个类型一般不会出现哈希重复,但如果说现在我真的在整个代码之中,我们用的是自定义类,并且真真正正的出现了哈希重复的话,那这个问题怎么解决呢?

比如说我们现在回到这个大码中,我们看这里啊同学们,这个程序大码是我们之前见到的。所以,我们需要提出这个问题,即在我们进行 Map 数据存储的时候,如果我们的哈希值重复了,该怎么办呢?