当前位置: 首页 > news >正文

Java中的Map集合与文件操作详解

1. Map集合概述

Map是一种键值对(key-value)的集合,常用于存储具有映射关系的数据。与List和Set不同,Map的键(key)是唯一的,而值(value)可以重复。Map集合的主要实现类有HashMapTreeMapHashtableLinkedHashMap

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();}
}

http://www.lryc.cn/news/535570.html

相关文章:

  • SAP-ABAP:dialog界面中的数据块Event Block详解举例
  • PostgreSQL 开发利器:Navicat 核心功能与资源攻略
  • 飞算 JavaAI:加速 AI + 行业趋势的智能化进程
  • XZ_Mac电脑上本地化部署DeepSeek的详细步骤
  • Flink-DataStream API
  • 2.4 构建模块化应用
  • DeepSeek:从入门到精通
  • JAVA学习第二天
  • DevOps工具链概述
  • windows系统远程桌面连接ubuntu18.04
  • kafka动态监听主题
  • Python虚拟环境管理工具 pyenv
  • 网络安全产品架构图 网络安全相关产品
  • C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
  • 如何实现Deepseek的本地部署并集成本地知识库?
  • vue学习笔记8
  • 【自学笔记】Vue基础知识点总览-持续更新
  • ETL的使用(sqoop):数据导入,导出
  • 【核心特性】从鸭子类型到Go的io.Writer设计哲学
  • 多模态模型详解
  • Go 语言里中的堆与栈
  • 八、OSG学习笔记-
  • 本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui
  • 网络分析工具—WireShark的安装及使用
  • MobaXterm的图形化界面支持:原理与分辨率问题解决
  • Java JVM(Java Virtual Machine)解析
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 现阶段股指期货交易保证金和费用多少?股指期货一手多少钱?
  • 使用mermaid画流程图
  • 大模型笔记:pytorch实现MOE