在Map中实现key唯一不重复操作

这篇文章主要介绍了在Map中实现key唯一不重复操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在Map中实现key唯一不重复操作,久久派带你了解更多相关信息。

Map中如何实现key唯一不重复

问题:如何做到Map中key唯一不重复,每次都遍历来equals比较吗?

首先,答案是否。如果全部遍历的话,当Map中元素很多的时候,显然查询效率低。

解释: HashMap属于散列存储结构,其table的存储是放在不同的Jvm内存区域。通过一个整型值来标识table的区域,相当于这个区域的下标。然后整个查找过程就从不再需要遍历整个table,只需遍历这一区域的数据即可。

结合HashMap.class中的put方法来说明:

在Map中实现key唯一不重复操作

如何找到这个区域呢?

1.首先将传入的key值用hash方法转化为int型的hash值,并且通过该方法让hash值变得各位更均匀一些。变得更均匀的目的是让每一个区域的大小更加等分些,公平利用存储空间,查询速度得到提升。

2.而后的indexfor方法将根据其hash值和table的大小得到这个区域的“位置下标”。具体其方法的实现同样也是为了让各个区域分布的更加均匀。

得到这个区域以后,再遍历这个区域来找到对应的元素

1.通过for循环遍历这个区域的链表,在循环中如果key值的hash值相等,并且其key值相等,那么进行覆盖原元素操作。

2.如果遍历结束依然没找到,则新添元素

Map放入相同的key值

因为Map本身是不可以放相同的key的,但是如果我们想,也是有办法的。

另外java也给我们提供了一个钻空子的方法,这就是JDK1.8的IdentityHashMap,也是Map的一个实现类

HashMap比较key的值是用equals来比较的,所以只要key的值一样,就会被认为是同一个key。而IdentityHashMap是用==来比较key的存放地址,所以,只要我们重新new出来一个对象,就可以把值相同的key定义为值相等但地址不相同的key,这样就不会被认为是同一个key

public class MapTest {  public static void main(String[] args) {  Map map = new IdentityHashMap();    map.put(new Integer(1), \"tom\");  map.put(new Integer(1), \"ben\");  map.put(new Integer(1), \"cat\");  map.put(new Integer(1), \"dog\");    System.out.println(map); }}

输出结果是:

{1=tom, 1=dog, 1=cat, 1=ben}

另外HashMap还可以自己重写hashCode和put来实现hashCode的值不一样,从而不会被认为是同一个key,继续研究。。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/18281.html

(0)
nan
上一篇 2021-08-28
下一篇 2021-08-28

相关推荐

  • 长尾词挖掘工具有哪些(长尾词生成工具推荐)

    长尾关键词就是指我们通过在网上搜索的非目标关键词,但也能够为网站带来搜索流量的关键词。长尾关键词是带来有效流量的基本保证,长尾关键词一般都是比较长的,由2~3个词组成,甚至有些长尾关键词就是由短语组成的。一般通过长尾关键词搜索到网站的用户,都是有比较

    2022-01-10
    0
  • 男子万元改装电动两轮车 刚骑500米就自燃!官方科普改装危害 !

    作为上班、买菜、接娃的短途代步神器,电动两轮车凭借便捷性赢得不少人的喜爱,但总有一些寻求速度的车主私自改装,导致车辆起火。据“中国消防”微信公众号消息,近日,广西河池一男子驾驶一辆电动两轮车载朋友在路上行驶,不料车辆在途中竟发生自燃。从监控中可以看出,电动车起火速度非常快并产生爆炸,火光冲天,幸好2

    2023-03-28 热点头条
    0
  • 央视评天府少年团解散(该团平均年龄只有8岁!)

    央视评天府少年团解散:孩子不是筹码,别拿“年少成名”赌明天。遏制资本造星敛财,守住为人父母的底线。找回干净的童年

    2021-08-26
    0
  • 如何跟老板谈加薪(如何与老板谈加薪案例)

    如何跟老板谈加薪(如何与老板谈加薪案例)一个完整案例,如何去和老板谈加薪?|飞越迷雾第二篇这是桔梗在“谈判思维”的第521篇推文。全文共4274字,阅读大约需要5分钟。1引言小康心情忐忑。她敲了敲老板林总办公室的门,林总,您有空聊几句吗

    2021-11-27
    0
  • 可减少75%碳排放!丰田和美孚合作开发新合成燃料 !

    随着美国环保署拟出台更加严格的排放法规,丰田和埃克森美孚正在合作开发一种新的合成燃料。根据相关的介绍,新的合成燃料可能让燃油车生命周期内的排放量最多可减少75%。丰田一直对纯电动汽车方案持怀疑态度,因此其现在正利用现有的燃油和乙醇开发自己的合成燃料。尽管新的合成燃料仍处于测试阶段,但埃克森美孚战略和

    热点头条 2023-04-15
    0
  • 李玉刚四美图被认成回美国 ! 中国汉字真是博大精深 !

    李玉刚四美图被卖家认成李玉刚回美国,看起来这4个字真的有点像呀!怎么可以这么搞笑?想不到李老师的舞台剧《四美图》会以这样的方式上热搜,当年看DVD时就很希望能看一回现场的,话说有生之年还能在看到《四美图》重启吗?

    热点头条 2023-05-27
    0

发表回复

登录后才能评论