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作用域_全局和局部作用域有什么区别?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何获取免费开源的自助建站系统源码?

