Java中的Map集合与文件操作详解
1. Map集合概述
Map是一种键值对(key-value)的集合,常用于存储具有映射关系的数据。与List和Set不同,Map的键(key)是唯一的,而值(value)可以重复。Map集合的主要实现类有HashMap、TreeMap、Hashtable和LinkedHashMap。
1.1 Map的特点
-
无序性:Map的键是无序的,值的顺序与键无关。
-
键唯一性:Map中的键是唯一的,不允许重复。如果插入重复的键,新值会覆盖旧值。
-
值可重复:Map中的值可以重复,且可以有多个
null值。 -
键允许一个
null:Map的键允许有一个null,但值可以有多个null。
1.2 Map的常用实现类
-
HashMap:基于哈希表实现,键无序,允许一个
null键和多个null值,线程不安全。 -
TreeMap:基于红黑树实现,键有序,不允许
null键,但允许null值,线程不安全。 -
Hashtable:线程安全的Map实现,不允许
null键和null值。 -
LinkedHashMap:基于链表实现,保持插入顺序,允许一个
null键和多个null值,线程不安全。
2. HashMap详解
2.1 HashMap的特点
-
键唯一,值可重复:HashMap的键具有Set集合的特点,元素唯一且无序。
-
底层数据结构:JDK1.7及之前是数组+链表,JDK1.8引入了红黑树,优化了性能。
-
线程不安全:HashMap是非线程安全的,适合单线程环境。
2.2 HashMap的使用示例
public static void main(String[] args) {// 创建一个HashMap集合Map<String, String> map = new HashMap<>();// 向集合中添加元素map.put("白日鼠", "白胜");map.put("豹子头", "林冲");map.put("小诸葛", "富安");// 允许一个null键和多个null值map.put(null, null);map.put("aaaa", null);// 值可以重复map.put("大诸葛", "富安");// 如果存在重复的key,新值会覆盖旧值map.put("小诸葛", "高衙内");System.out.println(map);
}
3. TreeMap详解
3.1 TreeMap的特点
-
键有序:TreeMap的键可以根据自然顺序或自定义比较器进行排序。
-
不允许
null键:TreeMap的键不能为null,但值可以为null。 -
底层数据结构:基于红黑树实现,是一种平衡二叉树。
3.2 TreeMap的使用示例
public static void main(String[] args) {// 创建一个TreeMap集合Map<String, String> map = new TreeMap<>();// 向集合中添加元素map.put("b", "白胜");map.put("a", "林冲");map.put("e", "富安");map.put("c", "富安");System.out.println(map);
}
4. Hashtable详解
4.1 Hashtable的特点
-
线程安全:Hashtable是线程安全的,适合多线程环境。
-
不允许
null键和null值:Hashtable不允许插入null键或null值。 -
无序性:Hashtable中的元素是无序的。
4.2 Hashtable的使用示例
public static void main(String[] args) {// 创建一个Hashtable集合Map<String, String> map = new Hashtable<>();// 向集合中添加元素map.put("b", "白胜");map.put("a", "林冲");map.put("e", "富安");// 不允许插入null值// map.put("c", null); // 会抛出NullPointerExceptionSystem.out.println(map);
}
5. LinkedHashMap详解
5.1 LinkedHashMap的特点
-
保持插入顺序:LinkedHashMap保持元素的插入顺序。
-
允许
null键和null值:LinkedHashMap允许一个null键和多个null值。 -
线程不安全:LinkedHashMap是非线程安全的。
5.2 LinkedHashMap的使用示例
public static void main(String[] args) {// 创建一个LinkedHashMap集合Map<String, String> map = new LinkedHashMap<>();// 向集合中添加元素map.put("b", "白胜");map.put("a", "林冲");map.put("e", "富安");map.put("c", null);System.out.println(map);
}
6. 文件操作
6.1 文件的创建与删除
public class FileDemo {public static void main(String[] args) throws IOException {// 创建文件File file = new File("D:\\aaa\\hello.txt");boolean newFile = file.createNewFile();System.out.println(newFile);// 删除文件boolean delete = file.delete();System.out.println(delete);}
}
6.2 目录的创建与删除
public class FileDemo2 {public static void main(String[] args) throws IOException {// 创建单级目录File file = new File("D:\\aaa\\bbb");boolean mkdir = file.mkdir();System.out.println(mkdir);// 创建多级目录File file2 = new File("D:\\aaa\\ccc\\hhh\\ggg");boolean mkdirs = file2.mkdirs();System.out.println(mkdirs);// 删除目录boolean delete = file.delete();System.out.println(delete);}
}
6.3 文件的判断与获取功能
public class FileDemo5 {public static void main(String[] args) throws IOException {File file = new File("D:\\aaa");// 判断文件是否存在boolean exists = file.exists();System.out.println(exists);// 判断是否是文件boolean isFile = file.isFile();System.out.println("是否是文件:" + isFile);// 判断是否是目录boolean isDir = file.isDirectory();System.out.println("是否是目录:" + isDir);// 获取文件的绝对路径String absolutePath = file.getAbsolutePath();System.out.println("绝对路径:" + absolutePath);}
}
7. 递归操作
public class FileDemo9 {static int level;public static void main(String[] args) throws IOException {File file = new File("D:\\Program Files\\eclipse");parseFile(file);}public static void parseFile(File file) {if (file == null || !file.exists()) {return;}level++;File[] files = file.listFiles();for (File f : files) {for (int i = 0; i < level; i++) {System.out.print("\t");}System.out.println(f.getName());if (f.isDirectory()) {parseFile(f);}}level--;}
}
递归删除文件夹
public class FileDemo11 {public static void main(String[] args) throws IOException {File file = new File("D:\\aaa");parseFile(file);}public static void parseFile(File file) {if (file == null || !file.exists()) {return;}File[] files = file.listFiles();for (File f : files) {if (f.isDirectory()) {parseFile(f);} else {f.delete();}}file.delete();}
}
相关文章:
Java中的Map集合与文件操作详解
1. Map集合概述 Map是一种键值对(key-value)的集合,常用于存储具有映射关系的数据。与List和Set不同,Map的键(key)是唯一的,而值(value)可以重复。Map集合的主要实现类有…...
SAP-ABAP:dialog界面中的数据块Event Block详解举例
在SAP的Dialog程序开发中,Event Block(事件块)是屏幕流逻辑(Flow Logic)中的关键部分,用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块(Module)结合使用&#x…...
PostgreSQL 开发利器:Navicat 核心功能与资源攻略
近几年,🐘 PostgreSQL 在全球数据库排名中表现优异。在 2025 年 2 月 DB-Engines 排名中 (如图),PostgreSQL 稳居第四名,并逐渐逼近第三名的 Microsoft SQL Server,其评分和受欢迎度持续增长,成为开源数据库…...
飞算 JavaAI:加速 AI + 行业趋势的智能化进程
在数字化浪潮奔涌的当下,“AI 行业” 已然成为不可逆的发展趋势,各行业都在积极探索 AI 技术与自身业务的融合,期望借此实现创新突破与转型升级。在这一进程中,飞算 JavaAI凭借其卓越的技术实力和独特的功能优势,为加…...
XZ_Mac电脑上本地化部署DeepSeek的详细步骤
根据您的需求,以下是Mac电脑上本地化部署DeepSeek的详细步骤: 一、下载并安装Ollama 访问Ollama官网: 打开浏览器,访问 Ollama官网。 下载Ollama: 在官网中找到并点击“Download”按钮,选择适合Mac系统的…...
Flink-DataStream API
一、什么样的数据可以用于流式传输 Flink的DataStream API 允许流式传输他们可以序列化的任何内容。Flink自己的序列化程序用于 基本类型:即字符串、长、整数、布尔值、数组复合类型:元组、POJO和Scala样例类 基本类型我们已经很熟悉了,下…...
2.4 构建模块化应用
第4章:构建模块化应用 模块化应用是 JDK 9 的核心特性之一,通过模块化系统(Project Jigsaw)实现代码的强封装和显式依赖管理。本章详细讲解如何从零构建一个模块化应用,包括模块定义、编译、打包、运行及调试。 4.1 模…...
DeepSeek:从入门到精通
在人工智能飞速发展的今天,DeepSeek作为一款备受瞩目的AI工具,正以其强大的功能和开源理念改变着我们的生活和工作方式。本文将带你深入了解DeepSeek,从基础入门到进阶应用,助你快速掌握这一前沿工具。 文末有详细资料可下载 文末…...
JAVA学习第二天
ArryList的构造方法和添加方法 01。构造方法的<>里面可以放数据类型 02. add()可以直接在后面加入数据,也可以指定下标的插入元素。 ArrayList的常用方法 ArrayList存储对象 在Java中,System.out.println()可以打印基本数据…...
DevOps工具链概述
1. DevOps工具链概述 1.1 DevOps工具链的定义 DevOps工具链是支持DevOps实践的一系列工具的集合,这些工具覆盖了软件开发的整个生命周期,包括需求管理、开发、测试、部署和运维等各个环节。它旨在通过工具的集成和自动化,打破开发与运维之间…...
windows系统远程桌面连接ubuntu18.04
记录一下自己在配置过程中遇到的问题,记录遇到的两大坑: windows系统通过xrdp远程桌面连接ubuntu18.04的蓝屏问题。参考以下第一章解决。 同一局域网内网段不同的连接问题。参考以下第三章解决,前提是SSH可连。 1. 在ubuntu上安装xrdp 参考&…...
kafka动态监听主题
简单版本 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; import org.springframework.kafka.listener.Containe…...
Python虚拟环境管理工具 pyenv
情景 我现在在部署一个python 项目,需要用到Python 3.10。但是我本地已经有了一个3.12解释器,有没有一种方法,可以管理python 环境,还可以随意切换。怎么做? window 安装pyenv-win 使用 PowerShell(以管…...
网络安全产品架构图 网络安全相关产品
一、信息安全产品分类 背景 美国将网络和信息安全产品分了9类:鉴别、访问控制、入侵检测、防火墙、公钥基础设施、恶意程序代码防护、漏洞扫描、取证、介质清理或擦除。中国公安部将网络和信息安全产品分了7类:操作系统安全、数据库安全、网络安全、病毒…...
C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
这里我们将在 VS 上实现 QT 编程,实现如下: 一、Vs 2022 配置(若已安装,可直接跳过) 点击链接:Visual Studio 2022 我们先去 Vs 官网下载,如下: 等待程序安装完成之…...
如何实现Deepseek的本地部署并集成本地知识库?
1、下载并配置Deepseek环境 https://blog.csdn.net/kxg6666/article/details/145593346?spm1001.2014.3001.5501 2、安装AnythingLLM AnythingLLM | The all-in-one AI application for everyone 如官网下载较慢,本文最后提供夸克离线下载链接。下载后默认安装…...
vue学习笔记8
Pinia基础使用 - 计数器案例 定义Store(state action) 组件使用Store getters实现 Pinia中的 getters 直接使用 computed函数 进行模拟, 组件中需要使用需要把 getters return出去 action异步实现 编写方式:异步action函数的写法和组件…...
【自学笔记】Vue基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Vue重点知识点总览一、Vue基础1. Vue简介2. MVVM设计思想3. 响应式数据绑定4. 组件化开发 二、Vue核心特性1. 虚拟DOM2. 模板语法3. 计算属性与监听属性 三、Vue高级…...
ETL的使用(sqoop):数据导入,导出
ETL ETL: 是数据抽取(Extract)、数据转换(Transform)和数据加载(Load)的整个过程 常用的ETL工具 sqoop 1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目,旨在帮助用户高效地在 Hado…...
【核心特性】从鸭子类型到Go的io.Writer设计哲学
在编程语言的设计中,鸭子类型和接口设计是两种非常重要的理念。它们都强调了对象的行为和能力,而非其具体的类型或继承关系。Go 语言的io.Writer 接口是这种设计理念的典型代表,它通过简洁的接口定义,实现了强大的功能和灵活性。 …...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
