返回顶部
首页 > 资讯 > 后端开发 > Python >在Map中实现key唯一不重复操作
  • 845
分享到

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

2024-04-02 19:04:59 845人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Map中如何实现key唯一不重复问题:如何做到Map中key唯一不重复,每次都遍历来equals比较吗?结合HashMap.class中的put方法来说明:如何找到这个区域呢?得

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

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

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

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

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

如何找到这个区域呢?

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,继续研究。。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 在Map中实现key唯一不重复操作

本文链接: https://lsjlt.com/news/133873.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Map中实现key唯一不重复操作
    目录Map中如何实现key唯一不重复问题:如何做到Map中key唯一不重复,每次都遍历来equals比较吗?结合HashMap.class中的put方法来说明:如何找到这个区域呢?得...
    99+
    2024-04-02
  • php不重复唯一值怎么实现
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php不重复唯一值怎么实现?PHP 生成不重复唯一标识 session_create_id()PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒...
    99+
    2024-04-02
  • php不重复唯一值如何实现
    今天小编给大家分享一下php不重复唯一值如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php实现不重复唯一值的方法:...
    99+
    2023-07-04
  • Java如何在Map中存放重复key
    目录如何在Map中存放重复key1.概述2.将集合作为Value3.使用Apache Commons Collections4.Guava Multimap5.自定义MultiMap...
    99+
    2024-04-02
  • java8 Stream list to Map key 重复 value合并到Collectio的操作
    java8 Stream list to Map key 重复 value合并到Collectio 关于把list转换成key value的map有很多博客上都有实现,这里是一个把v...
    99+
    2024-04-02
  • golang怎么实现判断key是否在map中
    这篇文章主要介绍golang怎么实现判断key是否在map中,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打包、虚拟机处理、数...
    99+
    2023-06-14
  • MySQL 中怎么实现可重复读操作
    这篇文章将为大家详细讲解有关MySQL 中怎么实现可重复读操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。账户表(省去其他字段)结构如下:CREATE&n...
    99+
    2024-04-02
  • Golang 使用Map实现去重与set的功能操作
    假设现在有一个需求 将以下 url 保存起来,要求不重复 www.baidu.com www.sina.com.cn www.hao123.com www.baidu.com w...
    99+
    2024-04-02
  • Java 如何在 Linux 中实现重定向操作?
    在 Linux 系统中,重定向操作是非常常见的,它可以让我们将程序的输出结果写入到文件中,或者从文件中读取输入数据。在 Java 中,我们同样可以通过代码实现重定向操作,本文将介绍如何在 Linux 中实现 Java 的重定向操作。 一、...
    99+
    2023-10-10
    重定向 linux 对象
  • python包实现 retrying 重复回调操作
    目录一、安装二、一直请求三、设置最大运行次数四、设置重试的最大时间五、设置间隔时间六、设置随机间隔时间七、随机倍数间隔时间八、指定异常类型九、过滤回调十、异常执行一、安装 循环、重复...
    99+
    2024-04-02
  • Php中生成6位无规律、唯一、不重复的邀请码
    //输入当前的用户编号自增长的id function getInviteCode($userId){ $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123...
    99+
    2023-09-17
    php javascript 开发语言
  • Duplicate entry 'value' for key 'unique_key_constraint' - 如何解决MySQL报错:唯一键约束中的重复记录
    在使用MySQL数据库时,我们经常会遇到一种错误,即报错:"Duplicate entry 'value' for key 'unique_key_constraint'"。这个错误通常是由于在插入或更新数据时,违反了唯一键约束,导致数据库...
    99+
    2023-10-21
    解决问题 MySQL报错 唯一键约束
  • 怎么在java中实现一个重复注解
    怎么在java中实现一个重复注解?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌...
    99+
    2023-06-14
  • Java 对象如何在 Linux 中实现重定向操作?
    在 Linux 中,重定向是一个常见的操作。通过重定向,我们可以将命令的输出或输入重定向到文件中,或者将一个命令的输出传递给另一个命令作为输入。在 Java 中,我们也可以实现重定向操作,这个过程需要用到 Java 中的标准输入流、标准输...
    99+
    2023-10-10
    重定向 linux 对象
  • Java如何在Unix操作系统中实现实时重定向?
    在Unix操作系统中,实时重定向是一种常见的需求。它可以让你在运行程序时,将程序的输出和错误信息同时输出到屏幕上或者保存到文件中,方便排查问题。Java作为一种跨平台的编程语言,在Unix操作系统中同样可以实现实时重定向。本文将介绍如何使...
    99+
    2023-10-02
    重定向 实时 unix
  • C#中怎么实现操作符重载
    C#中怎么实现操作符重载,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#操作符重载学习实践操作using System;  using&nb...
    99+
    2023-06-17
  • Shell中怎么实现文本去重操作
    这期内容当中小编将会给大家带来有关Shell中怎么实现文本去重操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码如下:ccccaaaabbbbddddbbbbccccaaaa现在需要对它进行去重处理,...
    99+
    2023-06-09
  • 使用 PHP 实现防抖功能,避免重复操作
    标题:PHP防抖功能实现示例防抖是前端常用的一种技术,它能够有效避免在某些特定场景下重复触发事件或请求。本文将介绍如何使用 PHP 实现防抖功能,并提供具体的代码示例。防抖的原理很简单,当一个事件在规定的时间内触发多次时,只执行最后一次触发...
    99+
    2023-10-21
    PHP 重复操作 防抖功能
  • 如何在Android 中实现scp操作
    目录SSHSCPSFTPAndroid中使用SCPSFTP 删除文件本文简单介绍用SSH库ganymed-ssh2在Android中实现scp操作。 SSH SSH是专为远程登录会...
    99+
    2024-04-02
  • 重定向操作如何在 Java 和 Linux 中实现对象传递?
    重定向是指将输出从一个地方转移到另一个地方。在 Java 和 Linux 中,重定向可以实现对象传递,使得程序可以更加灵活地处理数据。本文将介绍重定向在 Java 和 Linux 中的实现方式,并提供相应的演示代码。 一、Java 中的重...
    99+
    2023-10-10
    重定向 linux 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作