当前位置: 首页 > 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…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...