详细说明Java中Map和Set接口的使用方法
Map与Set的基本概念与场景
Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有:
1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢。
2. 二分查找,时间复杂度为,但搜索前必须要求序列是有序的。
上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:
1. 根据姓名查询考试成绩
2. 通讯录,即根据姓名查询联系方式
3. 不重复集合,即需要先搜索关键字是否已经在集合中
可能在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本节介绍的Map和Set是一种适合动态查找的集合容器。
模型概念
一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以模型会有两种:
- 纯 key 模型,例如:
- 有一个英文词典,快速查找一个单词是否在词典中
- 快速查找某个名字在不在通讯录中
- Key-Value 模型,例如:
- 统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>
- 梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号
Map接口的性质
在Java中,Map
接口是一个用于存储键值对(key-value pairs)的对象,它属于Java Collections Framework的一部分。Map
接口的主要特点包括:
-
键值对存储:
Map
存储的数据是以键值对的形式组织的,每个键(key)唯一对应一个值(value)。可以通过键来快速获取对应的值。 -
无序性:大多数实现类(如
HashMap
)不会保证元素的顺序,除非使用特定的实现(如LinkedHashMap
,它可以保持插入顺序,或者TreeMap
,它会按照键的自然顺序或指定的比较器进行排序)。 -
键的唯一性:在同一个
Map
中,不能有重复的键。如果试图将一个新的值与已有的键关联,原有的值将被新值替换。 -
实现类:Java提供了多种
Map
接口的实现,例如:HashMap
:基于哈希表的实现,允许null值和null键,查找速度快。TreeMap
:基于红黑树的实现,支持排序的键,查找速度相对较慢。LinkedHashMap
:结合了HashMap
的哈希表和链表特性,维护插入顺序。
-
常用方法:
Map
接口提供了一系列的方法,例如:put(K key, V value)
:将指定的值与指定的键关联。get(Object key)
:返回指定键所映射的值。remove(Object key)
:移除指定键的键值对。containsKey(Object key)
:检查是否存在指定的键。keySet()
:返回Map中所有键的集合。values()
:返回Map中所有值的集合。
总之,Map
接口是Java中重要的数据结构之一,方便有效地进行数据的存储和检索,广泛应用于各种场景中。
Map接口的使用方法
put(K key, V value)
:将指定的值与指定的键关联。
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);}
}
get(Object key)
:返回指定键所映射的值。
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);System.out.println(map.get("two"));}
}
V getOrDefault(Object key, V defaultValue) :返回 key 对应的 value,key 不存在,返回默认值
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);System.out.println(map.getOrDefault("five",-1));}
}
Set<K> keySet() :返回所有 key 的不重复集合,用 Set 容器接收
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);Set<String> strings = map.keySet();}
}
Collection<V> values() :返回所有 value 的可重复集合 ,用 Collection 容器接收
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);Collection<Integer> values = map.values();System.out.println("==");}
}
Set<Map.Entry<K, V>> entrySet() :返回所有的 key-value 映射关系
public class Main {public static void main(String[] args) {Map<String,Integer> map = new TreeMap<>();map.put("one",1);map.put("two",2);map.put("three",3);map.put("four",4);Set<Map.Entry<String, Integer>> entries = map.entrySet();for (Map.Entry<String, Integer> entry : entries) {System.out.println("Key = "+entry.getKey()+" Val = "+entry.getValue());}}
}
注意:
- Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
- Map中存放键值对的Key是唯一的,value是可以重复的
- 在TreeMap中插入键值对时,key不能为空,否则就会抛NullPointerException异常,value可以为空。但是HashMap的key和value都可以为空。
- Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
- Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
- Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入。
Set接口的性质
在Java中,Set
接口是一个用于存储唯一元素的集合,它也是Java Collections Framework的一部分。Set
接口的主要特点包括:
-
唯一性:
Set
中不允许重复的元素,这意味着集合中的每个元素都是唯一的。如果试图添加重复元素,操作将被拒绝,集合的状态不会改变。 -
无序性:
Set
通常不保证元素的顺序。尤其是使用HashSet
时,元素的存储顺序是随机的。而LinkedHashSet
可以维护元素的插入顺序,TreeSet
则会按自然顺序或自定义的比较器进行排序。 -
实现类:Java提供了多种
Set
接口的实现,包括:HashSet
:基于哈希表的实现,允许null元素,查找速度快,但不保证元素的顺序。LinkedHashSet
:结合了哈希表和链表的特性,保持元素的插入顺序。TreeSet
:基于红黑树的实现,按升序排序元素,不允许null值。
-
常用方法:
Set
接口提供了一系列的方法,例如:add(E e)
:向集合中添加元素,如果元素已存在,则返回false。remove(Object o)
:移除指定元素。contains(Object o)
:检查集合中是否包含指定元素。size()
:返回集合中元素的数量。clear()
:移除集合中的所有元素。iterator()
:返回一个迭代器,用于遍历集合中的元素。
-
应用场景:
Set
常用于需要存储不重复元素的场景,比如去重、集合运算(如交集、并集和差集)等。
总之,Set
接口是Java中重要的数据结构,适合用于处理唯一性要求的数据集合,具有高效的存储和检索特性。
Set接口的使用方法
set 接口中的方法和 Map 接口中的常见方法大差不差,就不一 一介绍了。
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
public static void TestSet(){Set<String> s = new TreeSet<>();// add(key): 如果key不存在,则插入,返回ture// 如果key存在,返回falseboolean isIn = s.add("apple");s.add("orange");s.add("peach");s.add("banana");System.out.println(s.size());System.out.println(s);
isIn = s.add("apple");// add(key): key如果是空,抛出空指针异常//s.add(null);// contains(key): 如果key存在,返回true,否则返回falseSystem.out.println(s.contains("apple"));System.out.println(s.contains("watermelen"));// remove(key): key存在,删除成功返回true// key不存在,删除失败返回false// key为空,抛出空指针异常s.remove("apple");System.out.println(s);s.remove("watermelen");System.out.println(s);Iterator<String> it = s.iterator();while(it.hasNext()){System.out.print(it.next() + " ");}System.out.println();
}
相关文章:
详细说明Java中Map和Set接口的使用方法
Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: 1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢。 2. 二分查找&#x…...
CSS3 scale 适配
Scale适配,在前端开发中,特别是在CSS3中,主要指的是使用scale()函数对元素进行缩放处理,以适应不同的屏幕尺寸或达到特定的视觉效果。以下是对Scale适配的详细介绍: 一、基本概念 scale() 是CSS3中transform属性的一…...
SX_初识GitLab_1
1、对GitLab的理解: 目前对GitLab的理解是其本质是一个远程代码托管平台,上面托管多个项目,每个项目都有一个master主分支和若干其他分支,远程代码能下载到本机,本机代码也能上传到远程平台 1.分支的作用:…...
这才是 PHP 高性能框架 Workerman 的立命之本
大家好,我是码农先森。 在这个大家都崇尚高性能的时代,程序员的谈笑间句句都离不开高性能,仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low,其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…...
Python——记录pip问题(解决下载慢、升级失败问题)
在python开发中,经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢,经常导致超时。 有很多朋友刚刚学Python的时候,会来问为什么pip下载东西这么慢啊? 而且pycharm里面下载库也是非常的慢…...
Windows Server 2025 Preview 部署 Ⅰ—— ISO下载和硬件要求
目录 1. 预览版下载2. Windows 服务器的硬件要求2.1安装 Windows Server 2025 虚拟机注意事项2.2 CPU2.3 RAM / Memory2.4 存储 Storage2.5 网络 Network2.6 其他需求 1. 预览版下载 下载网站:https://www.microsoft.com/en-in/evalcenter/download-windows-server…...
AI2-CUDA、CuDNN、TensorRT的详细安装教程
一、查看本机的显卡 首先你要看你的电脑是否有NVIDIA的独立显卡,你可以在设备管理器-显示适配器中查看 点击“开始”--找到“NVIDA Control Panel” 点击帮助--系统信息--组件,查看NVCUDA.DLL对应的产品名称,就可以看住CUDA的版本号 这里的版…...
TCP连接中重复使用了两个相同的端口怎么办
1.检查并避免重复配置: 首先,应该检查系统的配置和应用程序的设置,确保没有错误地将多个服务或进程配置为使用相同的端口号。 使用网络监控工具(如netstat、ss等)来查看当前哪些端口正在被使用。 2.使用端口复用选项…...
如何自定义异常
目录 为什么自定义异常自定义异常的步骤参考资料 为什么自定义异常 自定义异常是指开发者根据应用程序的需求和逻辑,自行定义的异常类。与 Java 提供的标准异常类(如 NullPointerException、IOException 等)不同,自定义异常允许程…...
C++中的依赖注入
目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式,它允许我们在不直接创建对象的情况下为对象提供其依赖项;它通过将…...
CSS平面转换-平移
平面转换-平移 属性 transform: translate(X轴移动距离, Y轴移动距离); 取值 像素单位取值百分比(参照盒子自身尺寸计算结果)正负均可 技巧translate()只写一个值表示只沿着X轴移动单独设置X或Y轴距离:translateX()或translateY() 代码 …...
Linux-3:Shell编程——基础语法(0-50%)
目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言,它…...
C++ --> string类模拟实现(附源码)
欢迎来到我的Blog,点击关注哦💕 前言: C中STL扮演着极其重要的角色,学习C重中之重的就是学习STL,虽然string不作为containers的其中一员,但是也是值得学习的le类。下面就进行string的模拟实现 string的模拟…...
基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程
系统概述 在当今数字化时代,微信作为社交媒体的巨头,为企业和个人提供了丰富的互动营销平台。其中,投票活动作为一种有效的用户参与和互动方式,被广泛应用于各种场景。为了满足这一需求,我们推出了一款基于PHPMySQL组…...
利用Arcgis设置分式标注(分子分母标注)
因工作需要,需要设置分式标注,下面详细介绍下如何利用arcgis 设置分式标注,以下操作以供参考,如有疑义可提出。 一、准备工作 软件:arcmap 示例数据:行政区shp矢量图 二、操作步骤 1.添加数据 将行政区sh…...
大麦网抢票攻略:使用Python Selenium实现
随着互联网技术的发展,在线购票已成为人们获取演出、比赛等活动门票的主要方式。然而,面对热门活动,门票往往在开售瞬间被抢购一空。为了解决这一问题,本文将介绍如何利用Python和Selenium技术实现大麦网的自动抢票。 1. 环境准备…...
Navicat 在整个数据库中查找字符
Navicat 在整个数据库中查找字符 1.首先打开Navicat,连接目标数据库。2.选择工具选项卡,选择在数据库或模式中查找。3.查找前填入关键字信息,点击查找4.双击查找到数据,进行查看 说明:当我们知道数据库有数据的关键字,…...
Python基础—处理时间问题
一文帮助您解决99%时间处理问题...
如何选择合适的自动化测试工具!
选择合适的自动化测试工具是一个涉及多方面因素的决策过程。以下是一些关键步骤和考虑因素,帮助您做出明智的选择: 一、明确测试需求和目标 测试范围:确定需要自动化的测试类型(如单元测试、集成测试、UI测试等)和测试…...
数字图像边缘曲率计算及特殊点检测
一、曲率和数字图像边缘曲率检测常用方法简介 边缘曲率作为图像边缘特征的重要参数,不仅反映了边缘的几何形状信息,还对于图像识别、图像分割、目标跟踪等任务具有显著影响。 曲线的曲率(curvature)就是针对曲线上某个点的切线方向…...
python map
在 Python 中,如果你指的是字典(dictionary),可以使用字典的 .items() 方法来遍历键值对。Python 中没有严格意义上的 Map 类型,而是使用字典来实现类似于键值对映射的功能。 遍历字典的键值对 可以使用 for 循环和 …...
每日一练 - NFV部署应用环境
01 真题题目 NFV 常常部署在下列哪些应用环境中?(多选) A.数据中心 B.网络节点 C.用户接入侧 D.客户机/服务器 02 真题答案 ABC 03 答案解析 NFV(Network Functions Virtualization,网络功能虚拟化)是一种技术,它允许在标准的…...
031-GeoGebra中级篇-GeoGebra的布尔值
在 GeoGebra 中,布尔值和条件判断是实现动态数学模型和交互式几何图形的重要工具。布尔值,即逻辑值,只有两个可能的取值:真(True)或假(False)。通过使用布尔值,我们可以创…...
基于Debian用户安装星火商店
星火商店下载地址:https://www.spark-app.store/ 本文章我以kali linux来做示范 注:基本debian的linux包括ubuntu,mint linux,kali linux,Pop!_OS,deepin等等 1.点击下载最新版本 2.点击下载 3.点击开始下载(它会自动跳转网页) 4.选择要下载…...
《计算机网络》(第8版)课后习题答案
【1-01】 计算机网络可以向用户提供哪些服务? 解答:这道题没有现成的标准答案,因为可以从不同的角度来看“服务”。 首先要明确的是,计算机网络可以向用户提供的最重要的功能有两个:连通性和共享。所 谓连通性,就是计算机网络使上网用户之间都可以交换信息,好像这些用户…...
我们的网站被狗爬了!
大家好,我是程序员鱼皮。 世风日下,人心不古。我们的程序员面试刷题网站 《面试鸭》 才刚刚上线了一个多月,就由于过于火爆,被不少同行和小人发起网络攻击。 而且因为我们已经有 4500 多道人工整理的企业高频面试题、100 多个各…...
docker安装与container基本使用
安装 Homebrew 的 Cask 已经支持 Docker for Mac, mac用户狂喜 brew install --cask --appdir/Applications docker其他入门用法可参考 Docker Hello World- 菜鸟教程 或网上自行搜索博客学习。本文主要记录我运行go-zero-mall用到的一些注意点。当然,gonivinck项…...
掌握文本搜索的利器:深入解析 Linux grep 命令的强大功能
grep 是一个强大的命令行工具,用于在文件中搜索指定的模式(字符串或正则表达式)。它的名字来源于 "global regular expression print",常用于文本处理、日志分析等任务。以下是 grep 命令的详细介绍和常用操作: 基本用法 搜索匹配的行 grep "pattern"…...
【天机学堂】面试总结
写在前面,首先要将天机学堂包装一下,智慧教育平台》,暂时就想到这个。天机学堂文档 1.包装简历 待更新。。。...
Java中Stream操作
Java中Stream操作 Stream 和 Optional区别 用途不同:Stream 用于处理集合中的元素序列,支持丰富的中间操作和终端操作;Optional 用于表示一个值可能为 null 的情况,提供了一种更优雅的处理方式。数据处理 vs. 容器:S…...
网站建设开发背景/怎么在网络上推广
MySQL简介: 高级MySQL:mysql 内核 sql优化工程师 mysql服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容灾备份 sql编程 完整的mysql优化需要很深的功底 MysqlLinux版的安装(mysql5.5) 1.下载地址 2.检查当前系…...
网站建设怎么挣钱/18款免费软件app下载
计算机c语言期末考试卷二.doc下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者&a…...
网站建设学习/怎么创建自己的网站
运动和力的关系是怎样的?从远古至今天,人们一直在探寻着。但从亚里士多德 “力是维持物体运动的原因”的观点,到牛顿第一定律告诉我们“力的真正效应不是使物体运动,而是改变物体的运动状态”,牛顿第二定律给出力和加速…...
北京网站设计服务商/如何制作网页游戏
哈喽大家好本期要给大家讲解的是有着图形界面的小游戏猜数字升级先给大家看看改版和不改版的区别海龟编辑器的模板猜数字:import randomthe_number random.randint(1, 10)print(Hi,训练师!我们来玩一个猜数字游戏吧!)guess int(…...
橙子建站跳转微信/网络推广方案范例
现在在做一个串口波形显示工具,即将串口数据绘制成曲线,动态显示。 整个程序是基于 tkinter 做的界面,用的是 canvas,然后再用 plot 去画曲线。 大概流程如下: 线程 1、读取串口数据,并将数据发送到消息队列…...
购物网站的开发/官方app下载安装
椒盐噪声去噪【摘要】 【摘 要】本文对中值滤波算法进行了改进,提出了一种基于噪声点检测的椒盐噪声去除方法。椒盐噪声去噪对分布在噪声范围内的点进行噪声点检测,对确定为噪声点的像素点进行中值滤波,其他像素点保持不变。 【关键词...【摘…...