iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入聊一聊JDK中的Map和Set
  • 865
分享到

深入聊一聊JDK中的Map和Set

jdk map和setjava map有哪些jdk set集合大小 2022-12-21 12:12:20 865人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 基础知识2.模型3.Map的使用4.Map接口的使用(1)元素的添加和更新操作(2)在Map集合中查询/搜索特定的值(3) 删除Map中指定的value和key 

1. 基础知识

集合Java.util包下的常用子类,集合无非就是各种数据结构的应用。集合存在的目的就是为了将数据高效的进行读写,无论哪种具体的集合无外乎CURD。

Map和set是一种专门用来进行搜索的容器或者数据结构(核心应用场景:高效搜索/查找)。

Map和Set是 一种适合动态查找的集合容器。

Set集合只能保存单个的元素。集合中所有元素是唯一的不重复的。

Map集合一次保存一个键值对(key = value)这种映射对象。

数学中的映射其实就是Java中的Map集合,存储的都是一个key对于一个value的映射关系。

在Map映射关系中,key值唯一的,value值可以重复。

Collection --> 单个元素保存的父接口。

List --> 可以保存重复的单个元素

Set --> 保存单个不重复元素。

Queue --> 队列接口,操作受限的线性表。

Deque --> 双端队列,使用此接口来表示栈或者队列。

2.模型

般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以 模型会有两种:

1. 纯 key 模型,比如:

有一个英文词典,快速查找一个单词是否在词典中

2. Key-Value 模型,比如:

统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>

梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号

而Map中存储的就是key-value的键值对,Set中只存储了Key。

3.Map的使用

Map:存储的key-value键值对,若需要根据不重复的key去查找value的内容,使用Map集合。

4.Map接口的使用

常用的两个子类:

HashMap底层基于哈希表(数组+链表)的实现。

TreeMap底层基于二分搜索平衡树的实现。

(1)元素的添加和更新操作

a.元素的添加和更新操作都是一个方法。put(K key,V value):将键值对key和value保存到当前的Map集合中。若key值已经存在,则更新value的值。

1.Map集合中,key值不能重复,若put时,发现key重复,则会将当前Map中对应的value值更新为此时的value的值。

2.value值可以重复。

3.在Map集合中,键值对是"无序"的,元素的保存顺序和添加顺序无关。

4.关于Map集合中保存null值

a.HashMap:key和value都可以为null。key值是唯一的,只能保存一个null的key。

b.在TreeMap中key值不能为null,value值可以为null。并且key值必须实现Compareable接口或者通过TreeMap的构造方法传入比较器对象!换句话说:保存在TreeMap的Key值必须是可比较的。TreeMap也是无序的(添加顺序和保存顺序不是一一对应)

c.在Map集合中,元素的添加顺序和保存顺序相同的子类是LinkedHaspMap。

且LinkedHaspMap有序的,添加顺序和保存顺序一一对应。

LinkedHashMap:给普通的HaspMap加了个链表,这个链表就保存了元素的添加顺序。

开发中可以改造LinkedHaspMap做LRU缓存

(2)在Map集合中查询/搜索特定的值

get(K key):根据key值搜索对应的value值,若没有对应的key值,返回null。

getOrDefault(K key,V defaultVal):根据key值搜索map中对应的value值,若没有找到,返回默认值defaultValue。getOrDefault方法常和put方法搭配使用,简化代码逻辑。

boolean.containsKey(K key):在当前Map集合中是否包含指定的key值。

boolean containsValue(V value):在当前Map集合中是否包含指定的value值。

(3) 删除Map中指定的value和key

remove(K key):删除key值对应的键值对对象,返回删除之前的value值。

remove(K key,V value):删除指定的key值以及对应的value值对象,返回布尔值表示是否删除成功。

clear():清空Map表(将当前Map中所有键值对对象一次清空)。

 (4) Map集合的遍历

Map集合的遍历是比较低效的。

for-each循环只能用于Iterable接口以及子类,Map集合和Iterable接口毫无关系。

要想进行Map集合的遍历,必须先将Map转为Set集合。

Map接口在存储键值对对象时,内部存储的一个个都是Map.Entry对象。

1.将Map对象转为Set对象,Set对象的内部就存储Map的一个个键值对Entry对象。

转为Set对象之后,就可以方便的使用for-each循环进行遍历。

其中的每个元素就是Map的Entry对象!

也可以分别输出key值和value值,这时重复的value也会重复输出。

 5.Set集合的使用

Set (Java PlatfORM SE 8 )

Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

 add(E e):向当前Set集合中添加一个新的元素e,若e不存在则成功添加,返回true;若e存在,添加失败,返回false。因此方便的使用Set集合的add方法做去重处理。

boolean remove(object o):删除指定元素o            (boolean返回值类型)

boolean contains(object o):查询当前Set集合中是否包含元素o

在Set集合中没有提供元素的修改方法。要向修改,先将这个元素删了,再添加新值。

6.Set集合和Map集合的关系

Set是保存单个不重复元素的集合,Map是保存一对键值对对象的集合。

Set的常用子类如HashSet,TreeSet,内部就使用的是对应的Map对象。

HashSet元素就在HashMap的key值上保存。

TreeSet元素就在TreeMap的key值上保存

总结

到此这篇jdk中Map和Set的文章就介绍到这了,更多相关JDK的Map和Set内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入聊一聊JDK中的Map和Set

本文链接: https://www.lsjlt.com/news/175451.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深入聊一聊JDK中的Map和Set
    目录1. 基础知识2.模型3.Map的使用4.Map接口的使用(1)元素的添加和更新操作(2)在Map集合中查询/搜索特定的值(3) 删除Map中指定的value和key ...
    99+
    2022-12-21
    jdk map和set java map有哪些 jdk set集合大小
  • 深入聊聊vue3中的reactive()
    在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。小白一枚,写得不好请多多见谅。调试版本为3.2.45什么是reactivereactive是Vue3中提...
    99+
    2023-05-14
    前端 Vue.js JavaScript
  • 深入聊聊Golang中的sync.Cond
    本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Cond 来实现 goroutine 之间的同步。1. 基本使用1.1 定...
    99+
    2023-05-14
    后端 Go
  • 深入聊一聊Angular开发的内容
    目录前言组件 Component路由 Router管道 Pipeline指令 Directive服务 Service总结前言 阅读本文,是在你了解 Angular 基本知识的前提下,...
    99+
    2024-04-02
  • 深入聊聊Node中的File模块
    在聊 Stream/Buffer 的时候,我们已经开始使用require("fs")引入文件模块做一些操作了文件模块是对底层文件操作的封装,例如文件读写/打开关闭/删除添加等等文件模块最大的特点就是所有的方法都提供的同步...
    99+
    2023-05-14
    Node.js 前端
  • 深入聊一聊JS中new的原理与实现
    目录定义构造函数体不同 无返回值 返回对象 返回非对象 没有属性绑定+返回非对象 构造函数类型不同 构造函数为普通函数 构造函数为箭头函数 手写new 总结定义 new 运算符创建一...
    99+
    2024-04-02
  • 深入聊聊gitee中的极化功能
    随着开源技术的日益发展,越来越多的开发者开始使用Gitee来管理和分享他们的代码。作为一个开发者,如何更好地利用Gitee提高自己的开发效率和项目贡献呢?其中之一就是要学会如何看极化。一、Gitee的极化概念Gitee的极化是指将代码库中的...
    99+
    2023-10-22
  • 深入聊一聊虚拟DOM与diff算法
    目录虚拟DOM与diff算法snabbdom环境搭建虚拟DOM和h函数diff算法patch函数patchVnode函数updateChildren函数v-for中key作...
    99+
    2024-04-02
  • 深入浅出聊一聊js中的'this'关键字
    目录前言什么是'this'关键字四种方式---1.调用函数的第一种方法是:将函数作为一种方法四种方式---2.调用函数的第二种方法是: 简单的调用函数,不将函数作为方...
    99+
    2024-04-02
  • 深入聊聊 Golang 的使用方法
    在互联网行业的大环境下,Golang(简称Go)已成为一个备受瞩目的编程语言,众多互联网公司如:谷歌、阿里巴巴、腾讯等,都已将其作为主力开发语言。Go 语言在因特网时代不断壮大的背景下,以并发编程,运行速度以及简单易用的特点,受到了众多程序...
    99+
    2023-05-14
  • 详细聊聊Mybatis中万能的Map
    目录万能的Mapdemomap 实现add usermap 实现通过id查询多个参数可以使用Map进行传参总结万能的Map 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我...
    99+
    2024-04-02
  • 深入聊聊C语言中的Const关键字
    目录前言01const简述02常量的应用常量作为函数的参数C++中应用加const03#define和const总结前言 const是一个C语言的关键字,它限定一个变量不允许被改变。...
    99+
    2024-04-02
  • 一文聊聊Angular中的依赖注入
    译者添加:举个例子 -- 当 classA 使用 classB 的某些功能时,则表示 classA 具有 classB 的依赖。在使用 classA 之前,我们需要创建 classB。推荐文章依赖注入是什么?如何使用它?我们都知道在 Ang...
    99+
    2023-05-14
    前端 JavaScript Angular.js
  • 聊聊Vue中$set是如何实现的?
    应用场景 let dataArr = ["item1"]; let dataObject = { name: "ccs" }; dataArr[2] = "i...
    99+
    2023-05-14
    Vue.js
  • angular学习之深入聊聊状态和动画
    本篇文章带大家深入了解一下angular中的状态和动画,简单介绍一下创建动画的方法,并聊聊关键帧动画、动画回调、可重用动画、交错动画等知识点,希望对大家有所帮助!状态1、什么是状态状态表示的是要进行运动的元素在运动的不同时期所呈现的样式。2...
    99+
    2023-05-14
    状态 动画 Angular
  • 详细聊聊JS中不一样的深拷贝
    前言 对于深拷贝这个概念在面试中时常被提起,面试官可能让你实现深拷贝需要考虑那些因素,或者直接让你手写封装一个深拷贝,那么今天就和大家探讨一下一个让面试官感到牛的深拷贝, 1.思考 ...
    99+
    2022-11-13
    js深拷贝实现方式 js 对象深拷贝 js深拷贝的应用场景
  • 深入浅出的聊聊Swift高阶函数
    目录初探高阶函数mapcompactMapcompactMapValuesflatMapfilterreduce组合使用总结初探高阶函数 在 Swift 中,高阶函数一共有下面几个...
    99+
    2024-04-02
  • 一起聊聊在python中读取和写入CSV文件
    本篇文章给大家带来了关于Python 的相关知识,其中主要介绍了读取和写入CSV文件的相关内容,包括了导入CSV库、对CSV文件进行读写等等内容,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】CSV(Comma-...
    99+
    2023-05-14
    python
  • 一文聊聊vue中的指令和插值
    data():存放页面中显示数据的地方<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title...
    99+
    2022-11-22
    Vue vue.js vue3
  • 详细聊聊JDK中的反模式接口常量
    目录前言常量接口类接口枚举类型结束语前言 在实际开发过程中,经常会需要定义一个文件,用于存储一些常量,这些常量设计为静态公共常量(使用 public static fina...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作