广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/133873.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在Map中实现key唯一不重复操作
    目录Map中如何实现key唯一不重复问题:如何做到Map中key唯一不重复,每次都遍历来equals比较吗?结合HashMap.class中的put方法来说明:如何找到这个区域呢?得...
    99+
    2022-11-12
  • php不重复唯一值如何实现
    今天小编给大家分享一下php不重复唯一值如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php实现不重复唯一值的方法:...
    99+
    2023-07-04
  • php不重复唯一值怎么实现
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php不重复唯一值怎么实现?PHP 生成不重复唯一标识 session_create_id()PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒...
    99+
    2022-11-03
  • MySQL 中怎么实现可重复读操作
    这篇文章将为大家详细讲解有关MySQL 中怎么实现可重复读操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。账户表(省去其他字段)结构如下:CREATE&n...
    99+
    2022-10-18
  • 怎么在java中实现一个重复注解
    怎么在java中实现一个重复注解?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌...
    99+
    2023-06-14
  • Java 如何在 Linux 中实现重定向操作?
    在 Linux 系统中,重定向操作是非常常见的,它可以让我们将程序的输出结果写入到文件中,或者从文件中读取输入数据。在 Java 中,我们同样可以通过代码实现重定向操作,本文将介绍如何在 Linux 中实现 Java 的重定向操作。 一、...
    99+
    2023-10-10
    重定向 linux 对象
  • Java 对象如何在 Linux 中实现重定向操作?
    在 Linux 中,重定向是一个常见的操作。通过重定向,我们可以将命令的输出或输入重定向到文件中,或者将一个命令的输出传递给另一个命令作为输入。在 Java 中,我们也可以实现重定向操作,这个过程需要用到 Java 中的标准输入流、标准输...
    99+
    2023-10-10
    重定向 linux 对象
  • Java如何在Unix操作系统中实现实时重定向?
    在Unix操作系统中,实时重定向是一种常见的需求。它可以让你在运行程序时,将程序的输出和错误信息同时输出到屏幕上或者保存到文件中,方便排查问题。Java作为一种跨平台的编程语言,在Unix操作系统中同样可以实现实时重定向。本文将介绍如何使...
    99+
    2023-10-02
    重定向 实时 unix
  • java如何实现获取字符串中第一个出现不重复的字符
    比如:输入name输出n,输入teeter输出r,输入namename输出null具体实现代码如下:import java.util.Scanner; public class Main { public static void mai...
    99+
    2020-03-13
    java 获取 字符串 不重复 字符 第一个
  • java实现输出字符串中第一个出现不重复的字符详解
    java实现输出字符串中第一个出现不重复的字符详解比如:输入name输出n,输入teeter输出r,输入namename输出null 具体实现代码如下:import java.util.Scanner;public class Main{ ...
    99+
    2023-05-31
    java 字符串 ava
  • 重定向操作如何在 Java 和 Linux 中实现对象传递?
    重定向是指将输出从一个地方转移到另一个地方。在 Java 和 Linux 中,重定向可以实现对象传递,使得程序可以更加灵活地处理数据。本文将介绍重定向在 Java 和 Linux 中的实现方式,并提供相应的演示代码。 一、Java 中的重...
    99+
    2023-10-10
    重定向 linux 对象
  • 怎么在R语言中实现两表连接且输出不重复数据
    本篇文章给大家分享的是有关怎么在R语言中实现两表连接且输出不重复数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。说明:在项目过程中,数据量较大,用到的是data.table包...
    99+
    2023-06-14
  • 怎么在Android应用中实现一个手势操作识别功能
    今天就跟大家聊聊有关怎么在Android应用中实现一个手势操作识别功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先,在Android系统中,每一次手势交互都会依照以下顺序执行。...
    99+
    2023-05-31
    android roi
  • Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法
    本文实例讲述了Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法。分享给大家供大家参考,具体如下:做Android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,...
    99+
    2023-05-31
    android activity
  • 数组索引是Numpy中最常用的操作之一,你知道如何在Python中实现吗?
    数组索引是Numpy中最常用的操作之一,通过数组索引可以访问数组中的特定元素,也可以通过切片访问数组的一部分。在Python中,我们可以使用Numpy库来实现数组索引操作。 首先,我们需要导入Numpy库: import numpy as ...
    99+
    2023-06-14
    http numpy 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作