map

集合中存储的是什么?是一个单一的对象(数字,对象,数组,集合)
    字典:词语-解释    字典结构
   词语对应关键字,解释对应值    关键字-值 Key-Value 键值对
    映射Map存储的就是若干个 键值对 的集合
    将键map到值的对象。一个map不能包含重复的键;每个键最多只能映射到一个值。
    Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个map的内容。

map图:

Map相关的方法

V put(K key, V value) 【添加/修改】
          将指定的值与此映射中的指定键关联(可选操作)。
    void putAll(Map<? extends K,? extends V> m)
          从指定映射中将所有映射关系复制到此映射中(可选操作)。
    boolean containsKey(Object key)  
      如果此映射包含指定键的映射关系,则返回 true。
    boolean containsValue(Object value)
          如果此映射将一个或多个键映射到指定值,则返回 true。
    V get(Object key)
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
    boolean isEmpty()
          如果此映射未包含键-值映射关系,则返回 true。
    int size()
          返回此映射中的键-值映射关系数。
    V remove(Object key)
          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
   Set<K> keySet()
          返回此映射中包含的键的 Set 视图。
   Collection<V> values()
          返回此映射中包含的值的 Collection 视图。
    Set<Map.Entry<K,V>> entrySet()
          返回此映射中包含的映射关系的 Set 视图。

代码示例:

package part01;import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;public class MapDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("apple", "苹果");map.put("banana", "香蕉");map.put("orange", "橘子");map.put("apple", "大苹果");//修改System.out.println(map);Map<String,String> map2 = new HashMap<String, String>();map2.put("Monday", "星期一");map2.put("Tuesday", "星期二");map2.put("orange", "大橘子");System.out.println(map2);map2.putAll(map);System.out.println(map2);System.out.println(map.containsKey("apple"));System.out.println(map.get("banana"));System.out.println(map.get("black"));System.out.println(map2.size());System.out.println(map2.remove("Monday"));System.out.println(map2.remove("Mondayhaha"));System.out.println(map2);System.out.println("=====================");//遍历键的集合Set<String> set = map2.keySet();Iterator<String> it = set.iterator();while (it.hasNext()) {String key = it.next();System.out.println(key + "=" + map2.get(key));}//遍历值的集合Collection<String> list =  map2.values();Iterator<String> it2 = list.iterator();while (it2.hasNext()) {System.out.println(it2.next());}//遍历键值对的集合Set<Map.Entry<String, String>> entrys = map2.entrySet();Iterator<Map.Entry<String, String>> it3 = entrys.iterator();while (it3.hasNext()) {Entry<String , String> ent = it3.next();System.out.println(ent.getKey() + ent.getValue()); //Enter.toString()}}
}

Map实现类

Map实现类
    我们一般将String或者Number用作于键 不太会去将自定义的对象用作于键
   重复                         null                             有序          安全       底层结构                       备注
Hashtable    键不能重复,键值都可null         无序          安全        哈希表+单链表       Key作为存储的关键 需要重写hashCode和equals
Properties    键不能重复 ,键值都可null        无序          安全        哈希表+单链表       Hashtable的一个子类 主要用在IO当中 HashMap      键不能重复,键值都可null         无序         不安全     哈希表+单链表       主要用在单线程环境下 与HashTable唯一的区别就是安全问题
LinkedHashMap 键不能重复,键值都可null    有序        不安全     哈希表+双重链表    HashMap的一个子类 有序 双重链表
TreeMap        键不能重复,键不能为null     自然排序    不安全     红黑树                     需要Key具有可比较性 实现Comparable接口
ConcurrentHashMap 与Hashtable基本一致的 只不多当前为安全的

代码示例:

package part01;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;import util.FileOperation;public class CountWords {//记录一篇文章当中 每一个单词出现的次数//it:10//he:180public static void main(String[] args) {ArrayList<String> words = new ArrayList<String>();FileOperation.readFile("a-tale-of-two-cities.txt", words);//文件TreeMap<String, Integer> map = new TreeMap<String, Integer>();for (String word : words) {if (!map.containsKey(word)) {map.put(word, 1);} else {map.put(word, map.get(word) + 1);}}System.out.println("Total words " + map.size());Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();while (it.hasNext()) {Entry<String, Integer> item = it.next();//Key-it : Value-10System.out.println(item.getKey() + " = " + item.getValue());}}
}

IO技术

从持久化存储设备将数据读取到内存 Input操作 输入流
    从内存将数据写入到持久化设备   Output操作 输出流
    输入和输出 相对于内存而言
    数据在硬盘上主要以文件形式体现。
 Flie类
        Java当中 将文件或者目录用File这个类来描述
        haha.txt demo.java 等称之为是一个File对象

File的构造函数

File(String pathname)   通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
绝对路径 从基本盘符开始如C盘 D盘;相对路径 当前工程下
如果路径不存在 也可以去创建一个文件对象,此时的路径 Java不去检测它的存在性

File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
parent 文件的父目录所属目录;child 文件的名称路径
将一个文件完整的路径 分为 父目录 + 文件名 的形式

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
parent 文件的父目录/所属目录 以一个文件对象形式存在;child  文件的名称/路径

注意:并不是所有的操作系统文件的分隔符 都是\   ,为了统一操作 Java在File类中 有这么一个字段static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。具体是什么分隔符 有JVM(操作系统)来决定。

代码示例:

package part02.file类;import java.io.File;public class FileDemo01 {public static void main(String[] args) {/*File的构造函数*/// \ 转义符 \n  \t // \\ 将转义符转义为斜杠\//绝对路径 从基本盘符开始C D E F....File f1 = new File("C:\\Users\\HENG\\Desktop\\haha.txt");//相对路径File f2 = new File("xixi.txt");//如果路径不存在 也可以去创建一个文件对象//此时的路径 Java不去检测它的存在性File f3 = new File("C:\\Users\\HENG\\Desktop\\lala.txt");//parent 文件的父目录所属目录//child 文件的名称路径//将一个文件完整的路径 分为 父目录 + 文件名 的形式File f4 = new File("C:\\Users\\HENG\\Desktop\\", "haha.txt");//parent 文件的父目录/所属目录 以一个文件对象形式存在//child  文件的名称/路径File parent = new File("C:\\Users\\HENG\\Desktop\\");File f5 = new File(parent, "haha.txt");//并不是所有的操作系统文件的分隔符 都是 \//为了统一操作 Java在File类中 有这么一个字段//static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 //具体是什么分隔符 有JVM(操作系统)来决定 String pathname = "C:"+File.separator+"Users"+File.separator+"HENG"+File.separator+"Desktop"+File.separator+"haha.txt";System.out.println(pathname);File f6 = new File(pathname);}
}

File获取的一些相关功能

getAbsolutePath()   返回此抽象路径名的绝对路径名字符串。

getAbsoluteFile()  返回此抽象路径名的绝对路径名形式。

getName() 返回由此抽象路径名表示的文件或目录的名称。

getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

length()  返回由此抽象路径名表示的文件的长度。

lastModified()  返回此抽象路径名表示的文件最后一次被修改的时间。

getTotalSpace()  返回此抽象路径名指定的分区大小。

getUsableSpace()  返回此抽象路径名指定的分区上可用于此虚拟机的字节数。

getUsableSpace()  返回此抽象路径名指定的分区上可用于此虚拟机的字节数。

代码示例:

package part02.file类;import java.io.File;public class FileDemo02 {public static void main(String[] args) {/*File获取的一些相关功能 */File f1 = new File("C:\\Users\\HENG\\Desktop\\haha.txt");File f2 = new File("xixi.txt");//获取文件对象的绝对路径-字符串System.out.println(f1.getAbsolutePath());System.out.println(f2.getAbsolutePath());//获取文件对象的绝对路径-文件对象File parent1 = f1.getAbsoluteFile();File parent2 = f2.getAbsoluteFile();//获取创建该文件对象时 所填写的路径System.out.println(f1.getPath());System.out.println(f2.getPath());//获取文件对象的文件名(带后缀名的名称)System.out.println(f1.getName());System.out.println(f2.getName());//获取文件对象的父目录的字符串形式 如果在创建对象时有父目录 则返回;没有则返回nullSystem.out.println(f1.getParent());System.out.println(f2.getParent());f1.getParentFile();f2.getParentFile();//获取文件的长度 字节ByteSystem.out.println(f1.length());System.out.println(f2.length());//获取文件最后一次修改的时间 毫秒System.out.println(f1.lastModified());System.out.println(f2.lastModified());File f3 = new File("C:");System.out.println(f3.getTotalSpace());       //所有空间System.out.println(f3.getUsableSpace());  //未使用空间System.out.println(f3.getFreeSpace());       //自由空间}
}

File创建/删除/判断

createNewFile()  当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
  true  说明文件不存在 且创建成功;false 说明文件存在 且没有创建 也不是覆盖
注意:文件名和后缀名是分开的。

mkdir()   创建此抽象路径名指定的目录。
true  说明目录不存在 且创建成功;false 说明目录存在 且没有创建 也不是覆盖
注意:文件和目录不能够用名称来分别;mkdir只能创建一级目录。

mkdirs()  创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。mkdirs创建多级目录
true  说明目录不存在 且创建成功;false 说明目录存在 且没有创建 也不是覆盖。

delete()  删除此抽象路径名表示的文件或目录。
true 说明文件/目录存在且被删除;false说明文件/目录不存在 则不删除
注意:删除后的文件/目录 不走回收站 直接删除 慎用!如果一个目录中有多个文件或其他目录 则不能删除!只能一个一个删。

exists()   测试此抽象路径名表示的文件或目录是否存在。

isFile()  测试此抽象路径名表示的文件是否是一个标准文件。

isDirectory()  测试此抽象路径名表示的文件是否是一个目录。

isHidden()  测试此抽象路径名指定的文件是否是一个隐藏文件。

代码示例:

package part02.file类;import java.io.File;
import java.io.IOException;public class FileDemo03 {public static void main(String[] args) throws IOException {/*File创建/删除/判断*/File f1 = new File("lala.txt");//创建一个文件对象//true  说明文件不存在 且创建成功//false 说明文件存在 且没有创建 也不是覆盖System.out.println(f1.createNewFile());File f2 = new File("abc.java");//文件名和后缀名是分开的System.out.println(f2.createNewFile());//创建了一个没有后缀名的文件对象//创建一个目录对象//true  说明目录不存在 且创建成功//false 说明目录存在 且没有创建 也不是覆盖File f3 = new File("abc"); //文件和目录不能够用名称来分别System.out.println(f3.mkdir());File f4 = new File("泷泽萝拉");System.out.println(f4.mkdir());File f5 = new File("大桥未久出道10周年.avi"); //目录也可以存在后缀名 但是没有任何意义的System.out.println(f5.mkdir());//mkdir只能创建一级目录File f6 = new File("深田咏美\\天海翼\\有码\\无码");
//      System.out.println(f6.mkdir());//mkdirs创建多级目录System.out.println(f6.mkdirs());//删除文件//true 说明文件存在 且被删除//false说明文件不存在 则不删除System.out.println(f1);System.out.println(f1.delete());File f7 = new File("早乙女由依");System.out.println(f7.delete());//删除目录System.out.println(f4.delete());System.out.println(f5.delete());//并没有全部删除完毕//机制://   1.删除后的文件/目录 不走回收站 直接删除 慎用!//    2.如果一个目录中有多个文件或其他目录 则不能删除!只能一个一个删System.out.println(f6.delete());File f8 = new File("曹操");System.out.println(f8.exists());System.out.println(f2.isFile());File f9 = new File("this is a dir");f9.mkdir();System.out.println(f9.isDirectory());System.out.println(f2.isHidden());}
}

获取文件列表的相关方法

list(FilenameFilter filter)
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
          FilenameFilter 文件过滤器(针对文件名称的过滤)

代码示例:

package part02.file类;import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;public class FileDemo04 {public static void main(String[] args) {/** 获取文件列表的相关方法*/File f1 = new File("C:\\Users\\HENG\\Desktop\\demo");System.out.println(f1.exists());//获取当前目录下所有(该层级下的)文件和目录的名称 字符串数组String[] fileNames = f1.list();for (String filename : fileNames) {System.out.println(filename);}//FilenameFilter 文件过滤器(针对文件名称的过滤)File f2 = new File("D:\\文档\\课件_Java");fileNames = f2.list(new FilenameFilter() {//所接受的文件名@Overridepublic boolean accept(File dir, String name) {return name.startsWith("Java");}});for (String filename : fileNames) {System.out.println(filename);}//获取当前目录下所有(该层级下的)文件和目录的对象 File数组File f3 = new File("D:\\文档\\课件_Java");File[] files = f3.listFiles();for (File file : files) {System.out.println(file);}System.out.println("==========================");//也可一传入一个关于文件名称的过滤器FilenameFilterfiles = f3.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return name.endsWith(".md");}});for (File file : files) {System.out.println(file);}System.out.println("===========================");//也可以传入一个关于文件对象的过滤器FileFilterfiles = f3.listFiles(new FileFilter() {@Overridepublic boolean accept(File f) {return f.isHidden();}});for (File file : files) {System.out.println(file);}System.out.println("=========================");File ff = new File("123");File[] ffs = ff.listFiles();for(int i = 0; i < ffs.length; i++) {}}
}

文件夹遍历与文件夹删除

用递归的思想去解决

用非递归的方式解决

代码示例:

package part02.file类;import java.io.File;
import java.util.LinkedList;public class FileDemo05 {public static void main(String[] args) {/** 文件夹遍历与文件夹删除*/
//      fileTraversal01();
//      fileTraversal02();fileDelete();}private static void fileTraversal01() {//用递归的思想去解决File dir = new File("C:\\Users\\HENG\\Desktop\\heng");readFile(dir,0);/*1.如果目录过于深的话 则递归层次也深 容易栈内存溢出2.如果目录/文件过多 for循环也很多*/}private static String getBlanks(int level) {StringBuilder sb = new StringBuilder();for (int i = 0; i < level; i++) {sb.append('\t');}return sb.toString();}private static void fileTraversal02() {//用非递归的方式解决文件遍历File dir = new File("C:\\Users\\HENG\\Desktop\\heng");LinkedList<File> queue = new LinkedList<File>();queue.offer(dir);while (!queue.isEmpty()) {File f = queue.poll();System.out.println("【" + f.getName() + "】");File[] files = f.listFiles();for (File file : files) {if (file.isFile()) {System.out.println(file.getName());} else {queue.offer(file);}}}}private static void readFile(File dir, int level) {File[] files = dir.listFiles();System.out.println(getBlanks(level) + "【" + dir.getName() + "】");for (File file : files) {if (file.isFile()) {System.out.println(getBlanks(level + 1) + file.getName());} else {readFile(file, level + 1);}}}private static void fileDelete() {//用递归的思想去解决File dir = new File("C:\\Users\\HENG\\Desktop\\123");deleteFile(dir);}private static void deleteFile(File dir) {File[] files = dir.listFiles();//如果一个目录里面没有任何文件/目录 空目录 listFiles 返回的则是一个null/*for (int i = 0; i < files.length; i++) {File f = files[i];if(f.isFile()) {f.delete();} else {deleteFile(f);}}dir.delete();*/if (files == null) {return;}for (File file : files) {if(file.isFile()) {file.delete();} else {deleteFile(file);}}dir.delete();}
}

java(17)map与IO技术相关推荐

  1. java中map转为json数据_Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回...

    Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回html 1.自定义工具类(简单易用)-下面是我写的一个简单的工具类前端 package com.test.util; i ...

  2. java io教学文件_通过代码实例跟我学Java语言程序设计及应用技术——Java文件IO技术及应用相关的教学示例(第3部分)...

    1.1Java文件IO技术及应用相关的教学示例(第3部分) 1.1.1文本字符流IO操作 1.字符流Reader/Writer类 提供的对字符流处理的类,它们为抽象类.其子类 (1)InputStre ...

  3. java map 数组_java技术Spring集合属性

    集合属性 在Spring中可以通过一组内置的XML标签来配置集合属性,例如:<list>,<set>或<map>. 1 数组和List 配置java.util.Li ...

  4. Java面试:数据库,Java,框架,前端技术。应有尽有

    ** Java面试宝典 ** 一. HTML&CSS部分 1.HTML中定义表格的宽度用80px和80%的区别是什么? PX标识像素,%标识整个页面的宽度百分比 2.CSS样式定义优先级顺序是 ...

  5. Java方向如何准备BAT技术面试答案(汇总版)

    转自:http://www.jianshu.com/p/1f1d3193d9e3 原文链接:Java方向如何准备BAT技术面试答案(汇总版) 这个主题的内容之前分三个篇幅分享过,导致网络上传播的比较分 ...

  6. 购物车的实现(jsp的session+Java的Map的结合)

    1:电商如此发达的现在,作为一个web开发程序猿,如果不会写购物车,真是有点不好意思找工作.所以抓紧练习啊,从上篇博客中抽离出如何实现购物车的功能. 2:首先需要理解购物车实现的一些基本步骤. 2.1 ...

  7. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  8. Java成神之路技术整理

    转载自 Java成神之路技术整理 以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,会从以下几个方面汇总,本文会长期更新. Java 基础篇 Java 集合篇 Java 多线程篇 J ...

  9. java的map集合_Java集合之Map

    正文 Map的特点? 通过Map接口的泛型我们可以看出:Map一次添加一对元素,存储的是键值对:而Collection接口一次添加一个元素. Map接口中的key是唯一的. Map的常见方法? 1.添 ...

最新文章

  1. Swift4之NSAttributedString的使用
  2. linux高编线程-------线程的创建,终止
  3. Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
  4. Linux中sftp加权限,Linux 搭建Sftp服务并进行权限设置
  5. [016]转--C++拷贝构造函数详解
  6. 请教大家:如何把.DCU文件反编译回源代码?谢谢。
  7. C#中如何控制播放音乐的声音大小
  8. python读取matlab矩阵_matlab、python中矩阵的互相导入导出方式
  9. Android基础 淡入淡出、上下弹出动画的
  10. Eclipse Web开发出现莫名其妙错误
  11. 主成分分析法案例_机器学习理论(五)主成分分析法
  12. 拓端tecdat|R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化
  13. 【光学设计基础】--01像差理论基础
  14. 【mmdetection】测试单张图像
  15. 使用计算机要遵循哪些规则,中国大学MOOC:\\\在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( )。\\\;...
  16. 关于意识形成过程的认识
  17. OpenCV参考手册之Mat类详解(一)
  18. 【面试题】前端人70%以上 不了解的promise/async await
  19. cas单点登录学习笔记 .
  20. flash_tools安装及使用完全教程

热门文章

  1. Oracle PL/SQL实战
  2. 循环语句(while循环)
  3. css动画让箭头上下跳动
  4. 杂谈——正则表达式:去除所有括号以及括号中的内容
  5. 微信小程序账号长时间未登录冻结解封
  6. openSSH-NFS的工作模式
  7. 云盘存储 教学反思_疫情时期,如何打造一堂高效在线直播课(附3套实用工具包)...
  8. 深度学习和TensorFlow学习资源(书籍、文档和视频)
  9. STM32CubeMx + LWIP(实现UDP组播/MQTT/热插拔)系列 四 ----- MQTT的连接与使用
  10. 在OpenCV里使用光流算法