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 接口是这种设计理念的典型代表,它通过简洁的接口定义,实现了强大的功能和灵活性。 …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
