首页 > 编程语言 >Java哈希表

Java哈希表

时间:2024-09-29 16:24:18浏览次数:7  
标签:hash hashmap HashSet 哈希 Java 表内 HashMap

哈希

主要用于快速查找、存储和比较数据。哈希的核心在于哈希函数(Hash Function),它将输入(通常称为键,key)映射到一个固定范围的输出值,这个输出值称为哈希值(Hash Value)或哈希码。

HashMap

HashMap<Integer, String> hashmap= new HashMap<Integer, String>();

增:

hashmap.put(1, "string1"); // 执行完后hash表内为{1=string1}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2, 3=string3}

删:

hashmap.remove(1); // 执行完后hash表内为{2=string2, 3=string3}
hashmap.remove(2); // 执行完后hash表内为{3=string3}
hashmap.remove(3); // 执行完后hash表内为{}
// 删除所有键值对
hashmap.clear();

查:

hashmap.put(1, "string1"); // 执行完后hash表内为{1=string1}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2}
hashmap.put(2, "string2"); // 执行完后hash表内为{1=string1, 2=string2, 3=string3}

替换:

hashmap.replace(key,value); // 返回0

 HashSet

Set<Integer> hashset= new HashSet<Integer>();

增:

hashset.add(1);
int[] nums = new int[]{1,2,3,4,5,6}
for(int x : nums) hash.add(x);

判断元素是否存在:

hashmap.contains(1);

删:

hashmap.remove(1);
// 删除所有元素
hashmap.clear();

 对比

 

HashSet学习总结

HashSet是Java集合框架中实现Set接口的一个重要类,它提供了一种无序且不重复元素的集合。HashSet的核心特点是:

不重复性:HashSet不允许存储重复的元素,这是通过调用元素的hashCode()和equals()方法来确保的。这两个方法共同决定元素的唯一性。
无序性:HashSet不保证元素的插入顺序,遍历HashSet时得到的顺序可能与插入顺序不同。
基于HashMap实现:HashSet实际上是对HashMap的一种包装,它将元素作为HashMap的键,而值统一设为一个固定对象(如PRESENT常量),从而达到只关心键的目的。
性能优势:得益于HashMap的哈希表实现,HashSet提供了高效的添加、删除和查找操作,平均时间复杂度接近O(1)。
注意事项:使用自定义对象作为HashSet的元素时,必须重写hashCode()和equals()方法,确保逻辑上相同(根据业务定义)的对象具有相同的哈希值和相等性判断。
HashMap学习总结

HashMap是Java中最常用的键值对集合,它实现了Map接口,提供了一种快速存取键值对的方式。HashMap的主要特征有:

键值对存储:每个元素由一个键和一个值组成,键是唯一的,值可以重复。
哈希表结构:内部使用哈希表实现,通过哈希函数将键映射到数组的特定索引,解决冲突的方法是链地址法(JDK 7及以前是链表,JDK 8引入了链表/红黑树的结构转换)。
线性探测法和扩容:当哈希碰撞导致冲突时,通过开放寻址法(如线性探测)或链表/红黑树解决。当HashMap的填充程度达到一定阈值(由负载因子控制,默认0.75),会触发扩容,以保持高效性能。
线程不安全:HashMap在多线程环境下不是线程安全的,若在并发环境中使用,推荐使用ConcurrentHashMap。
null值处理:HashMap允许一个null键和多个null值,这是与某些其他集合类不同的地方。

标签:hash,hashmap,HashSet,哈希,Java,表内,HashMap
From: https://www.cnblogs.com/gjwqz/p/18439168

相关文章

  • 洛谷每日一题(P2580 于是他错误的点名开始了)字典树/哈希表
    原题目链接:P2580于是他错误的点名开始了-洛谷|计算机科学教育新生态(luogu.com.cn)原题目截图:思路分析:解法一:哈希表法显而易见的一种思路,我们不妨模拟一下:当教练每次点名,我作为特派员,便查看一下有没有这个学生,是不是点过了这个学生。我们查看的过程,就依赖于一张表......
  • java计算机毕业设计社区活动中心(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着城市化进程的加速,社区作为城市生活的基本单元,其活力与凝聚力日益成为衡量城市宜居水平的重要指标。然而,传统社区管理模式下,居民间的互动不足、活......
  • 基于Java+Springboot+Vue开发的大学竞赛报名管理系统源码+开发文章1.3万字
    项目简介该项目是基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践......
  • 基于Java的校园外卖系统设计与实现源码+两万字论文+答辩PPT+开题报告
    又快到了准备毕业设计的时候了,相信大部分宝子们还没有头绪吧。没有关系的,看完本文相信会让你受益匪浅。 一、项目介绍 本系统是面向所有人的外卖点餐系统。系统内的角色分为管理员和前台用户。管理员有权登录管理端进行如员工信息管理、分类、菜品与套餐管理、查看订单详......
  • Java毕业设计:基于Springboo咖啡厅座位预约网站毕业设计源代码作品和开题报告怎么写
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • Java如何将Object转换成指定Class对象
    在Java中,将Object转换为指定类型的Class对象实际上是两个不同概念的操作:将Object实例转换为特定类型的实例:这通常涉及到类型转换(如(MyType)myObject)或者通过反射机制(Class.cast(Object))来进行。获取特定类型的Class对象:这可以通过.class语法或Class.forName(StringclassName)......
  • java 警告:源发行版17 需要目标发行版17
    问题:在从网上复制的项目想要在本地部署,或者本地有多个jdk版本,在开启项目时容易出现jdk版本不一致的问题,导致项目不能运行起来。解决:解决这种问题主要时修改各个模块的jdk版本,使之一致。即确保以下几个地方的版本一致1、在ProjectStructure的Project下确保SDK和Languagel......
  • 【数据库】Java 中 MongoDB 使用指南:步骤与方法介绍
    MongoDB是一个流行的NoSQL数据库,因其灵活性和高性能而广泛使用。在Java中使用MongoDB,可以通过MongoDB官方提供的Java驱动程序来实现。本文将详细介绍在Java中使用MongoDB的步骤以及相关方法。1.环境准备1.1安装MongoDB首先,确保你的系统中安装了Mongo......
  • PTA 实验三 零基础JAVA语言学习 6-3 定义游客类
    6-3定义游客类分数20全屏浏览切换布局作者 fpc单位 内蒙古师范大学定义游客类(其测试类已给出),要求如下:一个景区根据游人的年龄收取不同价格的门票。请编写游客类,根据年龄段决定能够购买的门票价格并输出当输入的年龄小于18或者大于60(不包括18,60)时,程序输出:年龄......
  • PTA 实验三 零基础JAVA语言学习 7-1 复数类的定义 要想编写一个复数类,可以进行复数加
      要想编写一个复数类,可以进行复数加法和减法运算。编写一个包含main方法的类测试该复数类。要求该复数类至少包含一个无参的构造方法和一个带参的构造方法;数据成员包括复数的实部和虚部,为double类型;包括两个方法,分别实现复数的加法和减法运算。测试代码如下:publicsta......