2021-07-28 Java课堂笔记Day12

1 Map (双列,映射)

将键映射到值的对象,不能包含重复的键,一个键最多映射一个值,而一个值可以被多个键映射。

格式:

public interface Map <K(键类型) , V(值类型)>

1.1 Map的接口的基本使用

put(K key, V value)将指定的值与该映射中的指定键相关联(可选操作)。
booleanisEmpty() 如果此地图不包含键值映射,则返回 true
Set<K>keySet() 返回此地图中包含的键的[Set]视图。
Vget(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射。
booleancontainsKey(Object key) 如果此映射包含指定键的映射,则返回 true
booleancontainsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true
Set<Map.Entry<K,V>>entrySet() 返回此地图中包含的映射的Set视图。
default Vreplace(K key, V value) 只有当目标映射到某个值时,才能替换指定键的条目。
intsize() 返回此地图中键值映射的数量。
Collection<V>values() 返回此地图中包含的值的[Collection]视图。

键用 Set 值用 Collection 的原因:键不可以重复,值可以重复

1.2 Map集合的遍历方式

方式一:获取键集,遍历键集,在遍历下用 get()获取值集

方式二:用 Map.Entry()方法获取键值对集合,获取键和值,遍历输出

1.3 HashMap

HashMap 是Map接口使用频率最高的实现类

允许存储 null 键和 null 值,与HashSet 一样,不保证映射顺序

键集是 Set 集合,无序,不可重复,如果键是自定义对象,则需要重写 hashCode 和 equals 方法

值集是 Collection 集合,无序,可重复

键值对集由一个键和一个值组成,是 Set 集合,无序,不可重复

HashMap 中判断键是否唯一和HashSet 中判断元素是否唯一方法相同

1.4 HashMap的存储结构

基于Hash表实现

JDK1.7前用数组+链表实现

JDK1.8后用数组+链表+红黑树实现

HashMap 中的重要常量:

DEFAULT_INITIAL_CAPACITY = 1 << 4 Map默认容量 2的4次方16

MAXIMUM_CAPACITY = 1 << 30 Map最大容量2的30次方

DEFAULT_LOAD_FACTOR = 0.75f 默认加载因子

TREEIFY_THRESHOLD = 8 链表转化为红黑树的最大长度

UNTREEIFY_THRESHOLD = 6 红黑树的最小长度,小于等于则转化为链表

Map 中的键和值可为任意类型,当使用自定义类作为键时,需要重写hashCode 和equlas 方法

1.5 HashTable

与 HashMap 类似

HashMap 不同步但允许 null,HashTable 同步但不允许 null

1.6 TreeMap

  • 基于红黑树实现,可对元素进行自然排序和定制排序
  • 此实现不同步

排序实现:

对于存入 TreeMap 的键,如果是自定义类必须要实现 Comparable 接口,重写 compareTo 方法(自然排序)

在创建 TreeMap 对象时传入比较器对象,重写 compare 方法(定制排序)

2 集合的工具类

Collections 作用:针对集合操作的工具类

static <T extends Comparable<? super T>>voidsort(List<T> list) 根据其元素的[natural ordering]对指定的列表进行排序。
static voidreverse(List<?> list) 反转指定列表中元素的顺序。
static voidshuffle(List<?> list) 使用默认的随机源随机排列指定的

3 IO

IO:输入/输出( input / output)

主要针对系统中的文件或目录进行相应操作

所有与 io 操作相关的类都位于 java.io 包下

3.1 File

  • 文件和目录路径名的抽象表示
  • 文件和目录可以通过 File 封装成一个对象
  • 对 File 而言,封装的并不是一个真正存在的文件,而是是一个路径,这个路径可以存在,也可以不存在
3.1.1 构造方法
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
3.1.2 File的创建方法
booleancreateNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
booleanmkdir() 创建由此抽象路径名命名的目录。
booleanmkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
3.1.3 File类的判断和获取功能

判断

booleanexists() 测试此抽象路径名表示的文件或目录是否存在。
booleanisAbsolute() 测试这个抽象路径名是否是绝对的。
booleanisDirectory() 测试此抽象路径名表示的文件是否为目录。
booleanisFile() 测试此抽象路径名表示的文件是否为普通文件。
booleanisHidden() 测试此抽象路径名命名的文件是否为隐藏文件。

获取

StringgetAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
StringgetName() 返回由此抽象路径名表示的文件或目录的名称。
StringgetParent() 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
FilegetParentFile() 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。
StringgetPath() 将此抽象路径名转换为路径名字符串。
String[]list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[]list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[]listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[]listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
3.1.4 File类的删除功能

方法:

booleandelete() 删除由此抽象路径名表示的文件或目录。
  • 删除功能只能删除文件或空目录,如果目录不为空,则删除失败
  • 该方法删除的文件和目录不会进入回收站

3.2 绝对路径和相对路径

绝对路径:完整的路径名,不需要其他信息就可以直接定位到文件的所在位置或位置,在Windows系统中以盘符开头,linux系统中以“/”

相对路径:必须使用取自其他领的信息进行解释,才能定位文件或目录

3.4 重命名

booleanrenameTo(File dest) 重命名由此抽象路径名表示的文件。

重命名时更改抽象路径名可以对文件进行移动

4 IO流

流:是一个抽象的概念,是对数据传输的总称,本质为输出传输

IO流用于处理设备间数据的传输问题

常见应用:文件的复制、上传、下载

input:指外部存储设备(磁盘、硬盘等)的文件读入到内存

output:值内存的数据输出到外部存储设备

4.1 IO流分类

按流向:

  • 输入流 读数据
  • 输出流 写数据

按数据类型

字节流 字节输入流(InputStream) 字节输出流(OutputStream)

字符流 字符输入流(Reader) 字符输出流(Writer)

IO流的使用场景

  • 纯文本文件(txt类型等)优先使用字符流
  • 二进制文件(图片、视频、音频等)优先使用字节流
  • 不确定类型的文件 推荐用字节流,字节是万能

4.2 字节流的使用

字节流抽象基类:

InputStream 该抽象类表示字节输入流的所有父类

OutputStream 该抽象类表示字节输出流的所有父类

所有子类都以 InputStream/OutputStream 结尾

常用的子类 FileInputStream(读数据)、FileOutputStream(写数据)

字节流创建方法

输入流:

FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

输出流:

FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。
FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。

4.2.1 字节流写数据

方法

voidwrite(byte[] b)b.length个字节从指定的字节数组写入此文件输出流。
voidwrite(byte[] b, int off, int len)len字节从位于偏移量 off的指定字节数组写入此文件输出流。
voidwrite(int b) 将指定的字节写入此文件输出流。
voidclose() 关闭此文件输出流并释放与此流相关联的任何系统资源。

使用字节输出流写数据的步骤

  1. 创建输入流对象
  2. 调用输入流方法,向文件写入数据
  3. 调用 close 方法,释放资源

实现换行写:

windows:\r\n

mac:\n

linux:\r

实现追加写:

令输入流对象的第二个参数为 true

不实现追加写时,每次都会创建一个新文件进行输入

字节流写输出的异常处理 :与其他异常处理相同都是抓抛模型

4.2.2 字节流读数据
4.2.2.1 每次读取一个整数
intread() 从该输入流读取一个字节的数据。

步骤:

  1. 创建字节输入流
  2. 调用字节流读数据的方法
  3. 调用 close()方法释放资源
4.2.2.2 每次读取一个字节数组
intread(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组。
intread(byte[] b, int off, int len) 从该输入流读取最多 len字节的数据为字节数组。

在输入流进行读取文件时,输出流在其他位置同时输出文件实现复制

文件复制时,最好用第二种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值