# 前言

  1. List:

    a. Vector:底层依靠数组来存储数据,默认初始容量是10,每次扩容是增加一倍。线程安全

    b. Stack:遵循后进先出的原则。继承了Vector,所以在最底层依然是依靠数组来存储数据

  2. Queue:队列。遵循先进先出的原则

  3. Set:

    a. 元素是唯一的。如果放入重复的元素,则会被舍弃

    b. HashSet:底层依靠HashMap来完成存储

    c. TreeSet:底层依靠二叉树结构来存储数据。要求元素之间大小可以比较,因此元素所对应的类必须实现Comparable接口

  4. 迭代器:

    a. 在底层是依靠指针的指向和挪动来获取数据

    b. 最早的迭代器是Enumeration,后来被Iterator取代

    c. 增强for循环本质上是一种迭代遍历

  5. 泛型:

    a. 参数化类型,接口是ParameterizedType

    b. 是JDK1.5的特性之一

    c. 泛型的擦除:用具体类型来替换泛型的过程。发生在编译期

    d. 泛型的上限: ? extends 类/接口

泛型的下限: ? super 类/接口

# Map - 映射

一、概述

  1. 将键映射到值,每一个键必须对应一个值

  2. 键是唯一的

  3. 如果存放重复的键,那么对应的值会被覆盖

  4. 映射的顶级接口Map。Map就是一个存储键值对的容器

  5. Map不是集合,但是Map是Java集合框架的成员

  6. Java集合框架 - Java CollectionsFramework包含了数组、集合、映射相关的类以及接口:Collection、Map、Arrays、Collections、Iterator、Comparator、Comparable

二、遍历映射

  1. }先获取所有的键,再根据键获取值

  2. 直接获取所有的键值对。代表键值对的接口Entry,Entry是Map的内部接口

三、实现类

  1. HashMap:

    a. 底层依靠数组+链表结构来存储数据

    b. 默认数组的初始容量是16,默认加载因子是0.75f

    c. JDK1.8中,如果单个桶中的节点个数超过8个会将链表扭转成一棵红黑树;当节点个数不足7个时候,会扭转会链表

    d. 如果指定了初始容量n,那么2x < n <= 2x+1,实际容量就是2x+1

    e. 当已用桶的数量/桶的总数量>加载因子的时候,会进行扩容。每次增加一倍

    f. 在扩容的时候,要将所有的元素进行重新的分布 - rehash

    g. HashMap在存储元素的时候,先计算键的哈希码,然后针对哈希码进行二次运算,使结果落在某个桶上

    h. 键值对在往桶中放的时候,会先和桶中的所有的键值对的键进行比较;如果键一致,则对应的值覆盖;如果键不一致,则插入到链表的头部

    i. 允许null键和null值

    j. 异步式线程不安全

  2. Hashtable - 仅作为了解:

    a. Hashtable是java中最早的映射

    b. 不允许键和值为null

    c. 底层也是依靠数组+链表结构

    d. 默认初始容量是11,默认加载因子是0.75f

    e. 给定的初始容量是多少,那么就是多少

    f. 同步式线程安全

# File

一、概述

  1. 代表文件或者目录(文件夹)的类

  2. 在Windows中,用\\间隔目录;在Linux或者是Unix中,是用/间隔目录, java中为了屏蔽不同操作系统的差异性,所以提供了File.separator表示间隔符

  3. 在Windows中,用;间隔不同的路径;在Linux或者是Unix中,用:间隔不同的路径,java中为了屏蔽不同操作系统的差异性,所以提供了File.pathSeparator表示间隔符

二、路径

  1. 绝对路径:以盘符或者是/开头的路径。在计算路径的时候和当前路径没有任何关系

  2. 相对路径:不以盘符或者是/开头的路径。在计算路径的时候需要以当前路径为基准进行计算 --- .. 表示上一层目录

三、练习

  1. 删除目录

思路:写成一个方法 --- 判断是一个文件(isFile())还是一个目录(isDirectory());如果是文件,直接删除(delete());如果是目录,获取这个目录中所有的子目录和子文件(listFiles()) --- 后续的操作和当前方法的功能一致的,直接调用当前的方法形成递归

  1. 统计工作空间中java文件的个数

思路:写成方法 --- 判断参数是文件还是目录;如果是文件,是否是一个java文件(先获取文件名,然后根据文件名判断);如果是目录,获取这个目录中所有的子文件和子目录,然后形成了递归

  1. 扩展:模拟操作系统的文件剪切的流程

  2. 扩展:剪切目录

# IO流

一、概述

  1. 是程序中一套用于数据传输的机制

  2. IO流 - Input/Ouput流 - 输入输出流

  3. 输入流:数据从外部流向程序。例如读取文件

  4. 输出流:数据从程序流向外部。例如向文件中写数据

Last Updated: 11/18/2022, 10:55:14 AM