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

麻雀AI助手Akagi:免费实时分析工具,5分钟提升雀魂游戏水平 [特殊字符]️

麻雀AI助手Akagi&#xff1a;免费实时分析工具&#xff0c;5分钟提升雀魂游戏水平 &#x1f004;️ 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將&#xff0c;能夠使用自定義的AI模型實時分析對局並給出建議&#xff0c;內建Mortal AI作為示例。 Supports Majs…...

企业级条形码解析实战:5步实现ZXing自定义解码器深度定制

企业级条形码解析实战&#xff1a;5步实现ZXing自定义解码器深度定制 【免费下载链接】zxing ZXing ("Zebra Crossing") barcode scanning library for Java, Android 项目地址: https://gitcode.com/gh_mirrors/zx/zxing 在当今企业数字化转型浪潮中&#xf…...

Vue-Tree-List:轻松构建优雅树形结构的Vue组件指南

Vue-Tree-List&#xff1a;轻松构建优雅树形结构的Vue组件指南 【免费下载链接】vue-tree-list &#x1f332;A vue component for tree structure 项目地址: https://gitcode.com/gh_mirrors/vu/vue-tree-list 你是否曾为在Vue项目中实现复杂的树形结构而感到头疼&…...

教师增强器:AI如何真正赋能一线教学而非替代教师

1. 这不是一场技术秀&#xff0c;而是一场教育现场的“静默革命”“AI正在重塑教育”——这句话听上去像极了科技发布会的开场白&#xff0c;但如果你真走进过北京某所公立小学的三年级语文课堂&#xff0c;或者旁听过深圳一所职校的数控编程实训课&#xff0c;你就会发现&…...

Illustrator智能填充脚本Fillinger:如何3步完成复杂图案设计

Illustrator智能填充脚本Fillinger&#xff1a;如何3步完成复杂图案设计 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在Adobe Illustrator中&#xff0c;你是否曾为填充复杂形状…...

上海交通大学LaTeX学术演示模板:5分钟创建专业幻灯片的完整教程

上海交通大学LaTeX学术演示模板&#xff1a;5分钟创建专业幻灯片的完整教程 【免费下载链接】SJTUBeamermin 上海交通大学 LaTeX Beamer 幻灯片模板 - VI 最小工作集 项目地址: https://gitcode.com/gh_mirrors/sj/SJTUBeamermin 想要快速制作符合上海交通大学视觉规范的…...

探索NHSE:解锁动物森友会存档编辑的终极解决方案

探索NHSE&#xff1a;解锁动物森友会存档编辑的终极解决方案 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾经在《动物森友会》中为收集稀有物品而苦恼&#xff1f;是否梦想打造一个完美…...

三步突破原神60FPS限制:安全高效的游戏性能优化方案

三步突破原神60FPS限制&#xff1a;安全高效的游戏性能优化方案 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock genshin-fps-unlock 是一款专为《原神》PC版玩家设计的开源帧率解锁工具&…...

决策树 随机森林面试详解|剪枝、过拟合、特征重要性

前言 决策树逻辑直观易懂,是面试高频基础算法,衍生出的随机森林更是工业界常用集成模型。面试常考三大树算法区别、划分依据、剪枝策略、优缺点、特征重要性、过拟合解决办法,本文全部整理成背诵版答案,轻松应对口述提问。 一、决策树基础概念 什么是决策树 仿照人类决策思…...

逆向思维拆解:我是如何通过AST“翻译”极验4混淆代码的逻辑的(含控制流平坦化详解)

逆向工程实战&#xff1a;用AST解析技术破解JavaScript混淆的艺术 当面对一团被精心混淆过的JavaScript代码时&#xff0c;就像侦探面对加密的线索——每个字符都可能是关键&#xff0c;每个变量名都可能是陷阱。本文将带你走进AST&#xff08;抽象语法树&#xff09;的世界&am…...