分享好友 最新动态首页 最新动态分类 切换频道
java核心知识之集合详解五(Map集合和Collections工具类)
2024-12-26 23:57

Map 用于保存具有关系的数据,因此Map集合里保存着两组值 ,一组值用于保存 Map 里的 key ,另外一组值用于保存 Map 里的 value , 。 ,即同一个 Map 对象的任何两个 key 通过 equals 方法比较总是返回 false 。

java核心知识之集合详解五(Map集合和Collections工具类)

Map集合常用的API方法

 

示例代码

 
 

Entry内部类

Map 中包括一个内部类 Entry,该类封装了 一个 key-value 对。 Entry 包含如下三个方法 。

Object getKey(): 返回该 En町里包含的 key 值 。
Object getValue(): 返回该 Entry 里包含的value 值 。
Object setValue(V value): 设置该 Entry 里包含的 value 值,并返回新设置的 value 值 。

Map集合新增的API的方法

1、Object compute(Object key, BiFunction remappingFunction): 该方法使用remappingFunction 根据 原 key-value 对计算一个新 value 。 只要新 value 不为 null,就使用新value 覆盖原 value; 如果原 value 不为 null,但新 value 为 null ,则删除原 key-value对;如果原 value 、新 value 同时为 null , 那么该方法不改变任何 key-value 对,直接返回 null 。

2、Object computeIfAbsent(Object key, Function mappingFunction):如果传给该方法的 key 参数在 Map 中对应的 value 为 null ,则使用 mappingFunction 根据 key计算一个新的结果,如果计算结 果不为 null,则用计算结果覆盖原有的 value 。 如果原 Map 原来不包括该 key,那么该方法可能会添加一组 key-value 对 。

3、Object computeIfPresent(Object key, BiFunction remappingFunction):如果传给该方法的 key 参数 在 Map 中对应的 value 不为 null,该方法将使用 remappingFunction 根据原key、 value 计算一个 新的结果,如果计算结果不为 null,则使用该结果覆盖原来的 value; 如果计算结果为 null,则删除原 key-value 对 。

4、void forEach(BiConsumer action): 该方法是 Java 8 为 Map 新增的一个遍历 key-value 对的方法,通过该方法可以更简洁地遍历 Map 的 key-value 对 。

5、Object getOrDefault(Object key, V defaultValue): 获取指定 key 对应的 value 。 如果该 key 不存在,则返回 defaultValue。

6、Object merge(Object key, Object value, BiFunction remappingFunction): 该方法会先根据 key 参数获取该 Map 中对应的 value 。 如果获取的 value 为 null,则直接用传入的 value 覆盖原有的 value (在这种情况下,可能要添加一组 key-value 对 ) ;如果获取的value 不为 null ,则使用remappingFunction 函数根据原 value 、新 value 计算一个新的结果,并用得到的结果去覆盖原有 的 value 。

7、Object putlfAbsent(Object key, Object value): 该方法会自动检测指定 key 对应的value 是否为 null,如果该 key 对应的 value 为 null,该方法将会用新 value 代替原来的 null 值 。

8、Object replace(Object key, Object value): 将 Map 中指定 key 对应的 value替换成新 value 。与传统put()方法不同的是,该方法不可能添加新的 key-value 对 。 如果尝试替换的 key 在原 Map 中不存在,该方法不会添加 key-value 对,而是返回 null 。

9、boolean replace(K key, V oldValue, V newValue): 将 Map 中指定 key-value对的原 value 替换成新value 。如果在 Map 中找到指定的 key-value 对,则执行替换并返回 true ,否则返回false 。

10、replaceAll(BiFunction function): 该方法使用 BiFunction 对原 key-value 对执行计算,并将计算结果作为该 key-value 对的 value 值 。

基本原理

LinkedHashMap 使用来维护 的次序(其实只需要考虑 key 的次序) ,该链表负责维护 Map 的迭代顺序,迭代顺序与 key-value 对的插入顺序保持一致。
LinkedHashMap 可以避免对 HashMap 、 Hashtable 里 的 key-value 对进行排序(只要插入 key-value对时保持顺序即可),同时又可避免使用 TreeMap 所增加的成本 。LinkedHashMap 需要,因此但因为它以链表来维护内部顺序,所以在迭代访问 Map 里的全部元素时将有较好的性能 。

实例代码

 
 
 

基本原理

SortMap接口有一个TreeMap实现类,TreeMap 就是 一个红黑树数据结构 , 每个 key-value 对即作为红黑树的一个节点 。 TreeMap 存储key-value 对(节点)时, 需要根据 key 对节点进行排序。 TreeMap 可以保证所有的 key-value 对处于有序状态。 TreeMap 也有两种排序方式。

1、自然排序 TreeMap实现类的所有Key必须要实现Comparable接口,而且所有的key必须要是同一个类对象的,否则会抛出ClassCastException.
2、定制排序 创建 TreeMap 时,传入一个 Comparator 对象, 该对象负责对 TreeMap 中的所有key 进行排序 。采用定制排序时不要求 Map的 key 实现 Comparable 接口。

TreeMap中判断两个key相等的方法是两个key通过compareTo()方法返回0, 如果使用自定义类作为TreeMap实现类的key时,应当重写equals()方法和compareTo()方法,使得两个方法的返回结果一致。

TreeMap实现类提供一系列的访问Key-Value方法如下

 

实例代码

 
 
 

基本原理

WeakHashMap 与 HashMap 的用法基本相似 。 与 HashMap 的 区别在于,HashMap 的 key 保留了对实际对象的,这意味着只要该 ,该 ,HashMap 也不会自动删除这些 key 所对应的 key-value 对 ;但 WeakHashMap 的 key只保留了对实际对象的弱引用,这意味着如果 WeakHashMap 对象的 key 所引用的对象没有被其他强引用变量所引用,则这些 key 所引用的对象可能被垃圾回收, WeakHashMap 也可能自动删除这些 key 所对应的 key-value 对 。

实例源码

 
 
 

基本原理

IdentityHashMap 实现类的实现机制与 HashMap 基本相似,但它在处理两个 key 相等时比较独特:在IdentityHashMap 中,当且仅当 两个 key 严格相等 (key1 == key2) 时, IdentityHashMap 才认为两个 key相等;对于普通的 HashMap 而言,只要 key1 和 key2 通过 equals()方法比较返回 true ,且它们的 hashCode值相等即可 。

实例源码

 
 
 

基本原理

EnumMap 是一个与枚举类一起使用的 Map实现, EnumMap 中的所有 key 都必须是单个枚举类的枚举值 。 创建 EnumMap 时必须显式或隐式指定它对应的枚举类。 EnumMap 具有如下特征 。

1、EnumMap在内部以数组形式保存,所以这种实现形式非常紧凑、高效 。
2、EnumMap 根据 key 的自然顺序(即枚举值在枚举类中的 定义顺序〉来维护 key-value 对的顺序 ,当程序通过 keySet()、 entrySet() 、 values()等方法遍历EnumMap 时可以看到这种顺序 。
3、EnumMap 不允许使用 null 作为 key ,但允许使用 null 作为 value 。如果试图使用 null 作为 key时将抛出 NullPointerException 异常 。 如果只是查询是否包含值为 null 的key,或只是删除值为null 的key ,都不会抛出异常 。

与创建普通的 Map 有所区别的是,创建 EnumMap 时必须指定一个枚举类,从而将该 EnurnMap 和
指定枚举类关联起来 。

实例源码

 
 
 

对于 Map 的常用实现类而言,虽然 HashMap 和 Hashtable 的实现机制几乎一样,但由于 Hashtable
是一个古老的、线程安全的集合,因此 HashMap 通常比 Hashtable 要快 。

TreeMap 通常比 HashMap 、 Hashtable 要慢( 尤其在插入、删除 key-value 对时更慢),TreeMap
底层采用红黑树来管理 key-value 对(红黑树的每个节点就是一个 key-value 对) 。

使用 TreeMap 有一个好处::TreeMap 中的 key-value 对总是处于有序状态 ,无须专 门进行排序操作 。当 TreeMap 被填充之后,就可以调用 keySet,取得由 key 组成的 Set,然后使用 toArray()方法生成 key的数组,接下来使用Arrays 的 binarySearch()方法在己排序的数组中快速地查询对象。

对于 一般的应用场景 , 程序应该多考虑使用 HashMap ,因为 HashMap 正是为快速查询设计的(HashMap 底层其实也是采用数组来存储 key-value 对 〉 。 但如果程序需要一个总是排好序的 Map 时,则可以考虑使用 TreeMap 。

LinkedHashMap 比 HashMap 慢一 点,因为它需要维护链表来保持 Map 中 key-value 时的添加顺序。IdentityHashMap 性能没有特别出色之处 ,因为它采用与 HashMap 基本相似的实现 , 只是它使用 == 而不是 equals()方法来判断元素相等 。 EnumMap 的性能最好 ,但它只能使用同一个枚举类的枚举值作为 key 。

Collections 提供了如下常用的类方法用于对 List 集合元素进行排序 。

 
 

Collection s 还提供了如下常用的用于查找 、 替换集合元素的类万法 。

最新文章
软件外链建设:全方位指南
软件开发是一个竞争激烈的行业,在其中脱颖而出至关重要。外链建设是提高网站权威和知名度的有效方式。本规划师将提供一个全面的计划和执行方案,以帮助您有效地建立软件外链,提高您的网站在搜索引擎中的排名。目标受众该外链建设规划师的
新建改扩建227所公办中小学,增加学位33.99万个!东莞教育吹响“千日攻坚号”
  2月3日,东莞市政府印发《东莞市关于加快公办中小学建设的实施意见》(以下简称为《实施意见》)的通知,聚焦教育投建和学位供给的瓶颈问题,这标志着东莞教育扩容提质千日攻坚行动正式打响。  根据《实施意见》,千日攻坚行动期间将
鑫彩平台注册平台
鑫彩平台注册平台应有尽有多种玩法全面查看和掌握,推荐专业彩票预测方式,让查询更高效率,从手机上查看中奖信息很方便,拥有全新彩票界面让您轻松成为大神,注册就送福利,每天都能抽奖。1、开奖数据内容是会进行完整的统计呈现,快速找
把电脑搬到“云”上,开启智能生活办公新篇章
把电脑搬到“云”上是种什么体验?出差旅途中,突然有紧急工作要处理,打开PAD登录移动云电脑账号,PAD秒变工作电脑,资料文件实时同步。想要感受一把黑神话·悟空的创新玩法,无奈电脑配置太弱,不用更新硬件,用移动云电脑、电脑配置云端
超逼真美女写真生成:揭秘最强AI工具与实用教程!
步骤1:访问搜狐简单AI小程序打开微信,搜索“搜狐简单AI”小程序,点击进入。步骤2:选择生成选项在首页,选择“美女写真生图”选项。步骤3:调整参数根据自己的需求,选择不同的风格、背景、发色等,尽可能详细地规划你想要的效果。步骤4
楚雄网站关键词优化排名
进行楚雄网站关键词优化排名可以通过以下步骤来提高搜索引擎优化(SEO)的效果:1. 关键词研究: - 利用工具(如Google关键词规划师、Ahrefs、SEMrush)找出与您网站相关且搜索量高的关键词。 - 考虑长尾关键词,这些关键词通常竞争较小且更
逾期之后如何协商还款才能顺利解决问题
逾期之后如何协商还款小编导语在现代社会中,经济活动频繁,借贷行为已成为人们日常生活的一部分。由于种种原因,借款人难免会遇到逾期还款的情况。逾期还款不仅会影响个人信用记录,还可能导致法律纠纷和额外的经济负担。因此,学会如何有
新媒体广告投放的主要付费模式有三种
CPM是按照展示计费,广告每展现给一千个人所需花费的成本,所以又叫干人展现成本。例如某个广告位干次曝光的价格为10元,则CPM=10。目前在很多平台CPM都是最主流的计费方式,按此付费的广告大多以品牌展示、产
【T989QQ输入法下载】三星T989QQ输入法8.7.7免费下载
QQ输入法是一款高效、智能的手机输入软件。能够支持多种输入:拼音、英文、五笔、笔画、手写、语音、数字、符号,配合整句输入、智能纠错、云候选等扩展功能,更加便捷的满足了不同用户的需求。QQ输入法通过多项技术,为用户带来更快、更稳
微信推广引流怎么做(4个精准引流的大招)
在这里首先要说的是,现在已经过了暴力吸粉的时候了,很多人通过各种方法引流来不精准的粉丝,无论对后期运营还是变现都产生了很大影响。因为引流不精准,用户对你需求度不高,自然不是拉黑就是选择性忽略,所以精准引流要先找准对标用户的
相关文章
推荐文章
发表评论
0评