Java Map简介_动力节点Java学院整理

发布时间 - 2026-01-11 00:57:02    点击率:

Map简介

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。

 Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如HashMap 类。

注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包 含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。

Map 接口:

 Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。  

Hashtable类     

Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。    

添加数据使用put(key,  value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable通过initial  capacity和load  factor两个参数调整性能。通常缺省的load  factor  0.75较好地实现了时间和空间的均衡。增大load  factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。  

使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是”one”,”two”,”three”: 

Hashtable numbers = new Hashtable(); 
numbers.put(“one”, new Integer(1)); 
numbers.put(“two”, new Integer(2)); 
numbers.put(“three”, new Integer(3));

  要取出一个数,比如2,用相应的key: 

Integer n = (Integer)numbers.get(“two”); 
System.out.println(“two = ” + n);

 由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。     

如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。

 Hashtable是同步的。 

 HashMap类  

HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null  value和null  key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load  factor过低。   

 WeakHashMap类  

WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

以上所述是小编给大家介绍的Java Map简介_动力节点Java学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# java  # map  # java 中HashMap实现原理深入理解  # java中 Set与Map排序输出到Writer详解及实例  # Java Base64位编码与String字符串的相互转换  # Base64与Bitmap的相互转换实例代码  # Java Map 按Key排序实例代码  # java HashMap扩容详解及实例代码  # java Map转Object与Object转Map实现代码  # 详解Java中list  # set  # map的遍历与增强for循环  # java HashMap内部实现原理详解  # 是一个  # 迭代  # 小编  # 他们的  # 是一种  # 在此  # 只需  # 而不  # 这两个  # 较好  # 将是  # 给大家  # 三种  # 自定义  # 作为一个  # 与之  # 要将  # 不确定  # 其中一个  # 过高 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 独立制作一个网站多少钱,建立网站需要花多少钱?  香港服务器部署网站为何提示未备案?  QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何处理文件下载请求?(Response示例)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速搭建高效服务器建站系统?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何使用withoutEvents方法临时禁用模型事件  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Python文件异常处理策略_健壮性说明【指导】  Laravel如何优化应用性能?(缓存和优化命令)  如何注册花生壳免费域名并搭建个人网站?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  如何快速搭建个人网站并优化SEO?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何做网站制作流程,*游戏网站怎么搭建?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  浅述节点的创建及常见功能的实现  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  bootstrap日历插件datetimepicker使用方法  魔方云NAT建站如何实现端口转发?  在线制作视频的网站有哪些,电脑如何制作视频短片?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何利用DOS批处理实现定时关机操作详解  JavaScript模板引擎Template.js使用详解  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  canvas 画布在主流浏览器中的尺寸限制详细介绍  IOS倒计时设置UIButton标题title的抖动问题  如何在云服务器上快速搭建个人网站?  phpredis提高消息队列的实时性方法(推荐)  如何快速搭建虚拟主机网站?新手必看指南  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  如何挑选优质建站一级代理提升网站排名?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  如何在腾讯云免费申请建站?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  iOS验证手机号的正则表达式  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  什么是javascript作用域_全局和局部作用域有什么区别?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何获取免费开源的自助建站系统源码?