一.数组和集合的特点
1.数组的特点:
数组中保存的元素都是有序的,可以通过索引快速访问 数组中保存的元素都是同一种类型 数组的长度在定义后,无法改变 数组无法获取其中保存的元素实际数量 2.集合的特点;
能保存一组数据,元素可以有序或无序(存入的顺序和读取的顺序不一致) 集合中保存的元素的数据类型可以不同 集合的容量可变 可以获取集合中保存的元素实际数量 二.集合家族
Collection接口
(1)List接口(有序可重复) 有序集合,元素可以重复,允许保存Null,可以通过索引获取对应的元素。 List接口在继承Colletion接口后,又拓展了一些操作元素的方法。
(2)ArrayList实现类 采用数组实现的集合 可以通过索引访问元素,可以改变集合大小,如果要在其中插入或删除元素时,会影响后续元素 该集合查询效率高,中途添加和删除元素效率低 集合中保存的都是引用类型。如集合中保存123,保存的不是int类型的123,而是Integer类型的 123
(3)LinkedList实现类 采用双向链表实现的集合 集合中保存的每个元素称为节点,除首尾节点外,其他节点既保存了自己的数据,还保存了其前后 节点的地址 如果在双向链表的结构中进行插入和删除节点的操作时,不会影响其他节点现在的保存位置。 添加的节点只需记录前后节点的位置接口。 如果要查询某个节点的地址时,需要从头结点或尾节点开始搜索目标节点的位置 双向链表在中间插入和删除数据效率高,随机读取的效率低
三.如何遍历集合
四种方法:1.普通for循环2.增强for循环3.forEach()方法4.迭代器
四.文件类
1.构造方法:
File(String pathName) 根据文件的完整路径创建File对象 File(String parent,String child) 根据文件的父目录的路径和自身的名称创建File对象 File(File parent,String child) 根据文件的父目录对应的File对象和自身的名称创建File对象
IO:指input输入流和output输出流
流Stream:在Java中,流表示计算机硬盘与内存之间传输数据的通道 将内存中的数据存入到硬盘中,称为写write,也称为输出Output 将硬盘中的数据存入到内存中,称为读read,也称为输入Input
流的分类: Java中的流也是类,以对象的实现表示流。流有"四大家族",是所有流的父类。 字节输入流InputStream FileInputStream、ObjectInputStream 字节输出流OutputStream FileOutputStream、ObjectOutputStream 字符输入流Reader FileReader、BufferedReader、InputStreamReader 字符输出流Writer FileWriter、BufferedWriter、OutputStreamWriter
流的四个父类特点: 这四个父类都是在java.io包下,都是抽象类,不能直接创建其对象,使用其子类对象 这四个类都有close()方法,用于关闭流对象,释放资源 输入流(InputStream和Reader)都有read()方法,用于读取数据,输出流(OutputStream和Writer) 都有write()方法 输出流(OutputStream和Writer)都有flush()方法,用于将流中的数据冲刷到硬盘中 在使用输出流对象时,一定要调用flush()或close()方法后,才能真正将数据写入到硬盘中 所有流中,以Stream结尾,都是字节流,数据以字节传输;以Reader或Writer结尾,都是字符 流,数据以字符传输 常用构造方法 作用 FileInputStream(String filePath) 根据文件完整路径创建流对象 FileInputStream(File file) 根据文件对象创建流对象 常用方法 作用 read() 读取一个字节,返回读取到的字节 read(byte[] bytes) 读取指定数组大小的字节,返回读取到的字节数量 read(byte[] bytes,int off,int len) 读取指定数组大小的字节,从off索引开始读取len个字节,返回读 取到的字节数量 available() 文件可读取的最大字节数量 close() 关闭流对象 常用构造方法 说明 FileOutputStream(String filePath) 根据文件名创建流对象,覆盖写入 FileOutputStream(String filePath,boolean appen) 根据文件名创建流对象,追加写入 FileOutputStream(File file) 根据文件对象创建流对象,覆盖写入 FileOutputStream(File file,boolean appen) 根据文件对象创建流对象,追加写入 读取硬盘中的数据时,读取的文件必须存在;写入数据到硬盘中时,写入的文件可以不存在,但父 目录必须存在。
FileInputStream文件字节输入流 :
常用构造方法:
FileInputStream(String filePath) 根据文件完整路径创建流对象 FileInputStream(File file) 根据文件对象创建流对象
常用方法:
read() 读取一个字节,返回读取到的字节 read(byte[] bytes) 读取指定数组大小的字节,返回读取到的字节数量 read(byte[] bytes,int off,int len) 读取指定数组大小的字节,从off索引开始读取len个字节,返回读 取到的字节数量 available() 文件可读取的最大字节数量 close() 关闭流对象
FileOutputStream文件字节输出流 :
FileOutputStream(String filePath) 根据文件名创建流对象,覆盖写入 FileOutputStream(String filePath,boolean appen) 根据文件名创建流对象,追加写入 FileOutputStream(File file) 根据文件对象创建流对象,覆盖写入 FileOutputStream(File file,boolean appen) 根据文件对象创建流对象,追加写入
使用FileInputStream和FileOutputStream读写时的注意 事项 在通过FileInputStream对象使用read(byte[] bytes)方法时,每次读取指定数组的字节,将读取到 的字节保存在字节数组中。 该方法的返回值是读取到的字节数量,如果最后一次读取的字节数量不足字节数组的大小时,只会 将读取到的内容覆盖数组中最前的几个元素。 所以最后一次读取时,读取的内容多于实际内容。 在通过FileOutputStream对象使用write(byte[] bytes),会将字节数组中的所有内容写入到输出流 中,在最后一次写入时,会写入多余的内容。 所以在写入时,使用write(byte[] bytes,int off,int len)方法,表示将字节数组中的内容,从off开始 写入len个
FileReader文件字符输入流 :
FileReader(String fileName) 根据文件名创建文件字符输入流对象 FileReader(File file) 根据文件对象创建文件字符输入流对象
常用方法 :
ready() 判断是否还有下一个字符 read() 读取下一个字符,返回读取到的字符 read(char[] chars) 按字符数组读取,返回读取到的字符数量,读取到的字符保存在字符数组 中 close() 关闭流对象
BufferedReader缓冲字符输入流:
构造方法 :BufferedReader(Reader in) 创建一个带有缓冲区(大小为8192的char数组)的字符输入流对象, 参数为Reader类型对象,Reader是抽象类,所以实际参数为 Reader的子类,如FileReader,在FileReader对象中定义要读取的 文件 BufferedReader(Reader in,int size) 创建一个指定缓冲区(字符数组)大小的字符输入流对象
常用方法 :ready() 判断是否还有字符 readLine() 读取整行字符 close() 关闭流对象
序列化ObjectOutputStream对象字节输出 流 序列化:将对象转换为文件的过程 被序列化的对象,其类必须要实现Serializable接口 这个接口是一个特殊的接口,其中没有定义任何方法,只是给类加上标记,表示该类可以被序列化
构造方法:ObjectOutputStream(OutputStream os) 根据字节输出流对象创建
常用方法 :writeObject(Object obj) 将一个对象写入到本地文件 flush() 冲刷数据到硬盘 close() 关闭流对象
反序列化ObjectInputStream对象字节输入 流:
ObjectInputStream(InputStream is) 根据字节输入流对象创建
常用方法 :readObject() 读取序列化后的文件,返回Object类型 close() 关闭流对象
五.序列化和反序列化案例
InputStreamReader 属于转换流(将字节流转换为字符流) OutputStreamWriter 属于转换流(将字节流转换为字符流) 案例参考网络编程套接字通信
个人体会:上一阶段的JAVA高级,相较于之前难度有明显的上升,更复杂的代码,更繁琐的流程,更绕的逻辑思维。难度直线上升,但我相信有志者,事竟成。刻苦的学习终于会迎来丰厚的回报