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


相关文章
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
231 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
262 101
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1322 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
1月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
186 7
|
1月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
115 8
|
1月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
177 6
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
70 7
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。