Java 集合框架06---Map的架构

简介: 前面我们学习了list的相关知识,接下来来学习下Map的相关知识。我们将从以下几个方面进行阐述

摘要


前面我们学习了list的相关知识,接下来来学习下Map的相关知识。我们将从以下几个方面进行阐述


1.Map集合的相关类图

2.Map的简介

3.AbstractMap的简介

4.SortedMap的简介

5.NavigableMap的简介

Map集合的相关类图

3fe2ff024bf30473625b46f874c6a71b_SouthEast.jpg

总结:

1. Map是一个映射接口,Map的存储内容是键值对

2. AbstractMap 实现了Map 接口中除了entrySet方法之外的大部分API。

3. SortedMap是继承于Map的接口,SortedMap的内容是排序的键值对。排序的方法是通过比较器

4. NavigableMap是继承于SortedMap的接口,与SortedMap相比,NavigableMap多了一系列导航的方法,如获取“大于/等于某对象的键值对”,“小于/等于某对象的键值对”

5. TreeMap继承于AbstractMap,且实现了NavigableMap,所以TreeMap可以保证是有序键值对。

6. HashMap 继承于AbstractMap,但没实现NavigableMap, 所以HashMap的内容是“键值对,但不保证次序”


Map的简介


Map的定义

public interface Map<K,V>{}


Map 是一个键值对的映射结构,Map 中键不可以重复,值可以重复,一个键最多映射一个值

Map 提供了三种Collection视图,允许以键集,值集和键-值映射关系集的形式来查看某个映射内容。

Map的映射顺序,有些实现类保证了顺序,如TreeMap,有些实现类则没有保证顺序,如HashMap。

Map的实现类应该提供两种构造器,一种是无参构造器,此构造器用于创建空映射,另一种是带一个Map参数的构造器,此构造器用于创建同该map等大小的映射。

Map的API

abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()


简要说明

1. Map接口分别提供了

entrySet() 返回键-值对关系集

keySet() 返回键集

values() 返回值集

2. Map 接口提供了一系列操作Map的方法,包括添加,移除元素等。


AbstractMap的简介


AbstractMap 的定义

public abstract class AbstractMap<K,V> implements Map<K,V> {}

说明:

1. AbstractMap 是一个实现了Map接口的抽象类,故其不能被实例化,只能作为其他实现类的父类

2. AbstractMap 实现了Map接口中的大部分方法。

3. 要实现不可修改的映射,开发人员只需扩展此类并提供entrySet方法的实现即可,该方法将返回映射关系set 视图,通常,返回的set将依次在AbstractSet上实现。此set不支持add()或者remove()方法,其迭代器也不支持remove() 方法。

4. 要实现可修改的映射,开发人员必须另外重写此类的put 方法(否则将抛出UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必须另外实现其remove 方法。


AbstractMap 的API

abstract Set<Entry<K, V>>     entrySet()
         void                 clear()
         boolean              containsKey(Object key)
         boolean              containsValue(Object value)
         boolean              equals(Object object)
         V                    get(Object key)
         int                  hashCode()
         boolean              isEmpty()
         Set<K>               keySet()
         V                    put(K key, V value)
         void                 putAll(Map<? extends K, ? extends V> map)
         V                    remove(Object key)
         int                  size()
         String               toString()
         Collection<V>        values()
         Object               clone()


SortedMap的简介


SortedMap的定义如下:

public interface SortedMap<K,V> extends Map<K,V> { }

SortedMap是一个继承于Map接口的接口。它是一个有序的SortedMap键值映射。SortedMap的排序方式有两种:自然排序或者用户指定比较器。插入有序SortedMap的所有元素都必须实现Comparable接口(或者被指定的比较器所接受)。

另外,所有SortedMap实现类都应该提供4个“标准”构造方法。

void (无参) 构造器,它创建一个空的有序映射,按照键的自然顺序进行排序。

带有一个Comparator类型参数的构造器,它将创建一个空的有序映射,根据指定的比较器进行排序。

带有一个Map类型参数的构造器,它将创建一个新的有序映射,其键-值映射关系与参数相同,按照键的自然顺序进行排序。

带有一个SortedMap类型参数的构造器,它创建一个新的有序映射,其键-值映射关系和排序方法与输入的有序映射相同。无法保证强制实施此建议,因为接口不能包含构造方法。

SortedMap的API

// 继承于Map的API
abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()
// SortedMap新增的API 
abstract Comparator<? super K>     comparator()
abstract K                         firstKey()
abstract SortedMap<K, V>           headMap(K endKey)
abstract K                         lastKey()
abstract SortedMap<K, V>           subMap(K startKey, K endKey)
abstract SortedMap<K, V>           tailMap(K startKey)


NavigableMap的简介


NavigableMap的定义

public interface NavigableMap<K,V> extends SortedMap<K,V> { }

NavigableMap是一个继承于SortedMap的接口。它是一个可导航的键-值对集合。具有了为给定搜索目标报告最接近匹配项的导航方法。

NavigableMap分别提供了获取“键”,“键-值对”,“键集”,“键-值对集”的相关方法。


NavigableMap的API

abstract Entry<K, V>             ceilingEntry(K key)
abstract Entry<K, V>             firstEntry()
abstract Entry<K, V>             floorEntry(K key)
abstract Entry<K, V>             higherEntry(K key)
abstract Entry<K, V>             lastEntry()
abstract Entry<K, V>             lowerEntry(K key)
abstract Entry<K, V>             pollFirstEntry()
abstract Entry<K, V>             pollLastEntry()
abstract K                       ceilingKey(K key)
abstract K                       floorKey(K key)
abstract K                       higherKey(K key)
abstract K                       lowerKey(K key)
abstract NavigableSet<K>         descendingKeySet()
abstract NavigableSet<K>         navigableKeySet()
abstract NavigableMap<K, V>      descendingMap()
abstract NavigableMap<K, V>      headMap(K toKey, boolean inclusive)
abstract SortedMap<K, V>         headMap(K toKey)
abstract SortedMap<K, V>         subMap(K fromKey, K toKey)
abstract NavigableMap<K, V>      subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
abstract SortedMap<K, V>         tailMap(K fromKey)
abstract NavigableMap<K, V>      tailMap(K fromKey, boolean inclusive)


说明:

NavigableMap除了继承SortedMap的特性外,它提供的功能可以分为4类:

第1类,提供操作键-值对的方法。

lowerEntry、floorEntry、ceilingEntry和higherEntry方法,它们分别返回与小于,小于等于、大于等于、大于给定键的键关联的Map.Entry对象。

firstEntry、pollFirstEntry、lastEntry和pollLastEntry方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回null。

第2类,提供操作键的方法。这个和第1类比较类似

lowerKey、floorKey、ceilingKey和higherKey方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。

第3类,获取键集

navigableKeySet、descendingKeySet分别获取正序/反序的键集。

第4类,获取键-值对的子集


引用

http://www.cnblogs.com/skywang12345/p/3308931.html

http://blog.csdn.net/eson_15/article/details/51150033


相关文章
|
19天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37
|
17天前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
42 18
|
7天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
6天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
11天前
|
机器学习/深度学习
ACM MM24:复旦提出首个基于扩散模型的视频非限制性对抗攻击框架,主流CNN和ViT架构都防不住它
【9月更文挑战第23天】复旦大学研究团队提出了ReToMe-VA,一种基于扩散模型的视频非限制性对抗攻击框架,通过时间步长对抗性潜在优化(TALO)与递归令牌合并(ReToMe)策略,实现了高转移性且难以察觉的对抗性视频生成。TALO优化去噪步骤扰动,提升空间难以察觉性及计算效率;ReToMe则确保时间一致性,增强帧间交互。实验表明,ReToMe-VA在攻击转移性上超越现有方法,但面临计算成本高、实时应用受限及隐私安全等挑战。[论文链接](http://arxiv.org/abs/2408.05479)
23 3
|
14天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
30 5
|
9天前
|
存储 缓存 Java
JAVA并发编程系列(11)线程池底层原理架构剖析
本文详细解析了Java线程池的核心参数及其意义,包括核心线程数量(corePoolSize)、最大线程数量(maximumPoolSize)、线程空闲时间(keepAliveTime)、任务存储队列(workQueue)、线程工厂(threadFactory)及拒绝策略(handler)。此外,还介绍了四种常见的线程池:可缓存线程池(newCachedThreadPool)、定时调度线程池(newScheduledThreadPool)、单线程池(newSingleThreadExecutor)及固定长度线程池(newFixedThreadPool)。
|
16天前
|
架构师 Java 程序员
Java架构师的工作年龄是什么?
Java架构师的工作年龄是什么?
20 0
|
2月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。
|
4月前
|
存储 算法 Java
滚雪球学Java(65):深入理解Java中的Map接口:实现原理剖析
【6月更文挑战第19天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
35 3
滚雪球学Java(65):深入理解Java中的Map接口:实现原理剖析
下一篇
无影云桌面