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及其实现类的对比: HashMap中元素的特点: 相关方法: 添加、修改操作: 删除操作: 元素查询的操作: 元视图操作的方法: TreeMap的使用: Properties类: Collections工具…...
【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。 原创文章,转载请注明出处: 【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…...
二、什么是寄存器
目录 一、STM32芯片架构简图及系统框图 1.1 STM32芯片架构简图 1.1.1 FLASH是什么,用来做什么 1.1.2 SRAM是什么,用来做什么 1.1.3 片上外设是什么,用来做什么 1.2 系统框图 1.2.1 驱动单元 1.2.2 被动单元 二、什么是寄存器 2.1 存…...
邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站
活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Ser…...
学习UI第一天
在工作闲暇之余,自己画的原型图,再次做一次记录,哈哈哈 萌宠领养UI设计原型图 https://modao.cc/proto/lq2KqIVBs48xwylNZlA7OP/sharing?view_moderead_only #萌宠领养-分享 可以点击此链接,进行查看O(∩_∩)O哈哈~...
1688商品详情原数据(2023年11月最新版)
返回数据: 请求链接 {"item": {"desc_wdescContent": {"itemProperties": [],"offerId": "705844836943","wdescContent": {"content": "<div id\"offer-template-0\"&g…...
CleanMyMac X2024免费测试版好不好用?值不值得下载
如果你是一位Mac用户,你可能会遇到一些问题,比如Mac运行缓慢、磁盘空间不足、应用程序难以管理等。这些问题会影响你的Mac的性能和体验,让你感到沮丧和无奈。那么,有没有一款软件可以帮助你解决这些问题呢?答案是肯定的…...
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万资金,想要全部投入搬砖事业,但对项目一无所知,只看中收益。即使你有充足的资金&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中一个非常常用的类,它提供了许多方法来操作字符串。以下是一些常用的string类方法: 构造函数: string(): 创建一个空的字符串。 string(const char* str): 用一个C风格字符串来初始化一个新的字符串。string(size_t n, char c): 创建一个由…...
Java面向对象(高级)-- 单例(Singleton)设计模式
文章目录 一、单例设计模式(1) 设计模式概述(2) 何为单例模式(3) 实现思路(4) 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 (5) 单例模式的…...
【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步
【Kingbase FlySync】命令模式:安装部署同步软件,实现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城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交志同道合的朋友!活动主题聚焦Open…...
C语言——冒泡排序
一、冒泡排序是什么 冒泡排序: 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。升序时:它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大&#x…...
08.智慧商城——购物车布局、全选反选、功能实现
01. 购物车 - 静态布局 基本结构 <template><div class"cart"><van-nav-bar title"购物车" fixed /><!-- 购物车开头 --><div class"cart-title"><span class"all">共<i>4</i>件商品…...
金属压块液压打包机比例阀放大器
液压打包机是机电一体化产品,主要由机械系统、液压控制系统、上料系统与动力系统等组成。整个打包过程由压包、回程、提箱、转箱、出包上行、出包下行、接包等辅助时间组成。市场上液压打包机主要分为卧式与立式两种,立式废纸打包机的体积比较小…...
python 自动化福音,30行代码手撸ddt模块
用 python 做过自动化的小伙伴,大多数都应该使用过 ddt 这个模块,不可否认 ddt 这个模块确实挺好用,可以自动根据用例数据,来生成测试用例,能够很方便的将测试数据和测试用例执行的逻辑进行分离。 接下来就带大家一起…...
基于GATK流程化进行SNP calling
在进行变异检测时,以群体基因组重测序数据为例,涉及到的个体基本都是上百个,而其中大多数流程均是重复的步骤。 本文将基于GATK进行SNP calling的流程写入循环,便于批量分析。 1 涉及变量 1.工作目录work_dir/ 2.参考基因组ref…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
