当前位置: 首页 > news >正文

Java,集合框架,关于Map接口与Collections工具类

目录

Map接口

Map及其实现类的对比:

HashMap中元素的特点:

相关方法:

添加、修改操作:

删除操作:

元素查询的操作:

元视图操作的方法:

TreeMap的使用:

Properties类:

Collections工具类

常用方法:

排序操作

查找

复制、替换

添加

同步


Map接口

Map及其实现类的对比:

java.util.Map:存储一对一对的数据(key-value键值对,类似于数学上的函数)

实现类:HashMap(主要实现类)、LinkedHashMap(继承于HashMap)、TreeMap、Hashtable、Properties

HashMap:主要实现类。线程不安全的,效率高。可以添加null的key和value值。底层使用数组+单向链表+红黑树结构存储(jdk8)。

LinkedHashMap:是HashMap的子类。在数组+单向链表+红黑树结构的基础上,增加了双向链表,用于记录添加的元素的先后顺序。在遍历元素时,就可以按照添加的顺序显示。

TreeMap:底层使用红黑树结构存储。可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。需要考虑使用自然排序和定制排序。

Hashtable:古老实现类。线程安全的,效率低。不可以添加null的key或value值。底层使用数组+单向链表结构存储(jdk8)

Properties:是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。

HashMap中元素的特点:

HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。key所在的类要重写hashCode( )和equals( )方法。

HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。value所在的类要重写equals方法。

HashMap中的一对key-value,就构成了一个entry。Map中的entry是不可重复的、无序的。所有的entry就构成了一个Set集合。

相关方法:

添加、修改操作:

object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中。

void putAll(Map m):将m中的所有key-value对存放到当前map中。

删除操作:

Object remove(Object key):移除指定key的key-value对,并返回value。

void clear( ):清空当前map中的所有数据。

元素查询的操作:

Object get(Object key):获取指定key对应的value。 

boolean containsKey(Object key):是否包含指定的key。 

boolean containsValue(Object value):是否包含指定的value。

int size( ):返回map中key-value对的个数。

boolean isEmpty( ):判断当前map是否为空。

boolean equals(Object obj):判断当前map和参数对象obj是否相等。

元视图操作的方法:

Set keySet( ):返回所有key构成的Set集合。

Collection values( ):返回所有value构成的Collection集合。

Set entrySet( ):返回所有key-value对构成的Set集合。

TreeMap的使用:

底层使用红黑树结构存储。

可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。

需要考虑使用自然排序和定制排序。

要求添加进TreeMap集合中的key元素必须是同一个类型的。

定制排序的步骤与TreeSet中的一致:

User u1 = new User("李",19);
User u2 = new User("张",20);
User u3 = new User("刘",18);
User u4 = new User("宋",21);
Comparator cc = new Comparator()
{@Overridepublic int compare(Object o1, Object o2)//按年龄从大到小{if(o1 == o2){return 0;}if(!(o1 instanceof User && o2 instanceof User)){throw new RuntimeException("类型错误");}User uu1 = (User) o1;User uu2 = (User) o2;if(uu1.getAge() < uu2.getAge()){return 1;}else if(uu1.getAge() == uu2.getAge()){return 0;}else{return -1;}}
};
TreeMap tt = new TreeMap(cc);
tt.put(u1,111);
tt.put(u2,222);
tt.put(u3,333);
tt.put(u4,444);Iterator ii = tt.entrySet().iterator();
while(ii.hasNext())
{System.out.println(ii.next());
}

Properties类:

是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。

具体使用如下:

File ff = new File("info.properties");
System.out.println(ff.getAbsolutePath());Properties pp = new Properties();
try
{FileInputStream fff = new FileInputStream(ff);pp.load(fff);String name = pp.getProperty("name");String password = pp.getProperty("password");System.out.println(name + "\t" + password);
} catch (FileNotFoundException e)
{throw new RuntimeException("NO");
} catch (IOException e)
{throw new RuntimeException("NO");
}

将key值name和password存储在文件“info.properties”中,要对整个代码中的name和password进行修改时,只需要对文件中的二者进行修改即可。

文件“info.properties”:

文件中等于号两边不能出现空格,否则会将空格也算作key值或value值的字符内容。

Collections工具类

Collections是操作List、Set、Map等集合的工具类。

常用方法:

排序操作

reverse(List):反转List 中元素的顺序。

shuffle(List):对 List 集合元素进行随机排序。

sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序。

sort(List,Comparator):根据指定的Comparator 产生的顺序对 List 集合元素进行排序。

swap(List,int,int):将指定 list集合中的i处元素和j处元素进行交换。

查找

object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素。

object max(Collection,Comparator):根据Comparator 指定的顺序,返回给定集合中的最大元素。

object min(Collection):根据元素的自然顺序,返回给定集合中的最小元素。

object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素。

int binarySearch(List list,T key)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。而且集合也事先必须是有序的,否则结果不确定。

int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。

int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。

复制、替换

 void copy(List dest,List src):将src中的内容复制到dest中

 boolean replaceAll(List list, Object oldVal, Object newVal):使用新值替换 List 对象的所有旧值

提供了多个unmodifiableXxx( )方法,该方法返回指定Xxx的不可修改的视图。

添加

boolean addAll(Collection c,T..elements)将所有指定元素添加到指定collection中。

同步

Collections 类中提供了多个synchronizedxxx(方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。

相关文章:

Java,集合框架,关于Map接口与Collections工具类

目录 Map接口 Map及其实现类的对比&#xff1a; HashMap中元素的特点&#xff1a; 相关方法&#xff1a; 添加、修改操作: 删除操作&#xff1a; 元素查询的操作: 元视图操作的方法&#xff1a; TreeMap的使用&#xff1a; Properties类&#xff1a; Collections工具…...

【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE &#xff08;含2.0以上版本&#xff09;默认库文件位置的方法。 原创文章&#xff0c;转载请注明出处&#xff1a; 【实用技巧】更改ArduinoIDE默认库文件位置&#xff0c;解放C盘&#xff0c;将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…...

二、什么是寄存器

目录 一、STM32芯片架构简图及系统框图 1.1 STM32芯片架构简图 1.1.1 FLASH是什么&#xff0c;用来做什么 1.1.2 SRAM是什么&#xff0c;用来做什么 1.1.3 片上外设是什么&#xff0c;用来做什么 1.2 系统框图 1.2.1 驱动单元 1.2.2 被动单元 二、什么是寄存器 2.1 存…...

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动&#xff0c;活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为演讲、动手实操&#xff0c;让开发者通过一个下午的时间增进对 Ser…...

学习UI第一天

在工作闲暇之余&#xff0c;自己画的原型图&#xff0c;再次做一次记录&#xff0c;哈哈哈 萌宠领养UI设计原型图 https://modao.cc/proto/lq2KqIVBs48xwylNZlA7OP/sharing?view_moderead_only #萌宠领养-分享 可以点击此链接&#xff0c;进行查看O(∩_∩)O哈哈~...

1688商品详情原数据(2023年11月最新版)

返回数据&#xff1a; 请求链接 {"item": {"desc_wdescContent": {"itemProperties": [],"offerId": "705844836943","wdescContent": {"content": "<div id\"offer-template-0\"&g…...

CleanMyMac X2024免费测试版好不好用?值不值得下载

如果你是一位Mac用户&#xff0c;你可能会遇到一些问题&#xff0c;比如Mac运行缓慢、磁盘空间不足、应用程序难以管理等。这些问题会影响你的Mac的性能和体验&#xff0c;让你感到沮丧和无奈。那么&#xff0c;有没有一款软件可以帮助你解决这些问题呢&#xff1f;答案是肯定的…...

Linux操作文件的底层系统调用

目录 1.概述 2.open的介绍 3.write 的介绍 4.read 5.close的介绍 6.文件描述符 1.概述 C语言操作文件的几个库函数:fopen,fread,fwrite,fclose; 系统调用:open,read,write,close; 系统调用方法实现在内核中;(陷入内核,切换到内核) 2.open的介绍 open重载:两个参数用于打…...

steam搬砖项目2023年现状分析,到底还能不能做?

关于CSGO游戏搬砖项目的5大认知误区 当前的steam搬砖项目市场正变得混乱不堪。你对该项目的了解程度决定了你是否能在这个生态系统中获得收益。 假设你有100万资金&#xff0c;想要全部投入搬砖事业&#xff0c;但对项目一无所知&#xff0c;只看中收益。即使你有充足的资金&a…...

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)

文章目录 第三章 识别CAN中的隐藏带宽信道3.1 隐蔽带宽vs.隐藏带宽3.1.1 隐蔽通道3.1.2 隐藏带宽通道 3.2 通道属性3.3 CAN隐藏带宽信道3.3.1 CAN帧ID字段3.3.2 CAN帧数据字段3.3.3 帧错误检测领域3.3.4 时间通道3.3.5 混合通道 3.4 构建信道带宽公式3.5通道矩阵3.6 结论 第四章…...

string类的常用方法

string类是C中一个非常常用的类&#xff0c;它提供了许多方法来操作字符串。以下是一些常用的string类方法&#xff1a; 构造函数: string(): 创建一个空的字符串。 string(const char* str): 用一个C风格字符串来初始化一个新的字符串。string(size_t n, char c): 创建一个由…...

Java面向对象(高级)-- 单例(Singleton)设计模式

文章目录 一、单例设计模式&#xff08;1&#xff09; 设计模式概述&#xff08;2&#xff09; 何为单例模式&#xff08;3&#xff09; 实现思路&#xff08;4&#xff09; 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 &#xff08;5&#xff09; 单例模式的…...

【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步

【Kingbase FlySync】命令模式:安装部署同步软件&#xff0c;实现Oracle到KES实现同步 一.准备工作二.环境说明三.目标四.资源虚拟机 五.实操(1).准备安装环境Orcle服务器(Oracle40)1.上传所有工具包2.操作系统配置a.增加flysync 用户、设置密码b.配置环境变量c.调整limits.con…...

2311d导入c的语义不同

原文 以下D代码正常工作: enum X "X"; import core.stdc.stdio; void main(){puts(X); }但是,如果该X枚举是C文件中#define的结果,则会出现错误: //x.c #define X "X" //D代码 import x; import core.stdc.stdio; void main(){puts(X); //错误 }错误:不…...

OpenHarmony Meetup北京站招募令

OpenHarmony Meetup城市巡回北京站火热来袭&#xff01;&#xff01;日期&#xff1a;2023年11月25日14:00地点&#xff1a;中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动&#xff0c;分享技术见解&#xff0c;结交志同道合的朋友&#xff01;活动主题聚焦Open…...

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序&#xff1a; 冒泡排序(Bubble Sort)&#xff0c;又被称为气泡排序或泡沫排序。升序时&#xff1a;它会遍历若干次需要排序的数列&#xff0c;每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&#x…...

08.智慧商城——购物车布局、全选反选、功能实现

01. 购物车 - 静态布局 基本结构 <template><div class"cart"><van-nav-bar title"购物车" fixed /><!-- 购物车开头 --><div class"cart-title"><span class"all">共<i>4</i>件商品…...

金属压块液压打包机比例阀放大器

液压打包机是机电一体化产品&#xff0c;主要由机械系统、液压控制系统、上料系统与动力系统等组成。整个打包过程由压包、回程、提箱、转箱、出包上行、出包下行、接包等辅助时间组成。市场上液压打包机主要分为卧式与立式两种&#xff0c;立式废纸打包机的体积比较小&#xf…...

python 自动化福音,30行代码手撸ddt模块

用 python 做过自动化的小伙伴&#xff0c;大多数都应该使用过 ddt 这个模块&#xff0c;不可否认 ddt 这个模块确实挺好用&#xff0c;可以自动根据用例数据&#xff0c;来生成测试用例&#xff0c;能够很方便的将测试数据和测试用例执行的逻辑进行分离。 接下来就带大家一起…...

基于GATK流程化进行SNP calling

在进行变异检测时&#xff0c;以群体基因组重测序数据为例&#xff0c;涉及到的个体基本都是上百个&#xff0c;而其中大多数流程均是重复的步骤。 本文将基于GATK进行SNP calling的流程写入循环&#xff0c;便于批量分析。 1 涉及变量 1.工作目录work_dir/ 2.参考基因组ref…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...