HashMap和File与IO总结

HashMap和File与IO

1、Collection
(1)体系结构Iterator Collection 子接口 List 实现类ArrayList、Vector、LinkedList Set HashSet…
Map 实现类 HashMap
(2)常用方法
(3)迭代器

  • 使用增强for,底层就是迭代器 for(类型 变量:要遍历集合或者数组) { }
  • 迭代器原理
  • 首先创建迭代器对象,判断是否有下一个元素,指向下一个元素,获取出来

2、List集合
(1)List特点:有序的,可以重复元素,底层结构数组、链表…
(2)List常用方法:add get size…
(3)List遍历四种方式:普通for、增强for、迭代器、List迭代器
(4)实现类存储结构和扩容机制:ArrayList、Vector、LinkedList

3、Set集合
(1)set特点:没有重复,无序
(2)实现类和方法
(3)Set集合遍历:增强for、迭代器

4、Map集合
(1)Map特点:键值对 key-value
(2)Map集合方法和遍历

  • 添加 put
  • 删除(取出) remove
  • 清空 clear
  • 所有key ketSet
  • 所有value values
一、HashMap底层结构和原理

(1)创建HashMap对象时候,初始化几个值,

  • 主要:table代表数组默认null,负载因子默认0.75,边界值0
    (2)第一次向HashMap添加元素
  • 根据添加数据key计算hash值
  • 判断当前table数组是否为空,第一次肯定是空,数组进行初始化
    – 数组容量 16 ,临界值 12
  • 根据数组初始长度和hash值得到数组某个位置,在位置添加元素(第一次加不存在重复问题)

(3)容量不超过临界值12时候,再次添加数据

  • 根据添加数据key计算hash值
  • 根据数组长度和hash值得到数组某个位置,在位置添加元素
    – 判断数组这个位置上面是否存在元素,如果不存在,添加
    – 如果位置存在元素,
    — 判断位置元素key是否一样,如果key相同,替换,如果key不一样,链表存储

(4)容量超过临界值12,添加数据

  • 根据添加数据key计算hash值
  • 根据数组长度和hash值得到数组某个位置,在位置添加元素
    – 判断数组这个位置上面是否存在元素,如果不存在,添加
    – 如果位置存在元素,
    — 判断位置元素key是否一样,如果key相同,替换,如果key不一样,链表存储
    – 判断数组容量是否超过临界值,如果超过进行扩容
    — 把数组大小2倍,临界值2倍
    — 把数组元素重新编排

(5)在jdk1.8优化

  • 如果数组容量64,链表节点8,把链表转换树形结构

二、Map集合补充
1、Hashtable解决线程安全问题,任何非 null 对象都可以用作键或值。
HashMap是线程不安全的,并允许使用 null 值和 null 键。
2、LinkedHashMap是HashMap子类
3、TreeMap

三、File文件操作
1、什么是File
File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件和目录都可以通过File类来完成,
File类能新建、删除、重命名文件和目录。

2、常用方法

public class FileDemo1 {
   

    public static void main(String[] args) throws IOException {
   
        // 文件路径名
//        String pathname = "D:\\aaa.txt";
//        File file1 = new File(pathname);

        // 文件路径名
        String pathname2 = "E:\\0224\\bbb.txt";
        File file = new File(pathname2);
        //1 查看是否存在文件
        boolean exists = file.exists();
        //System.out.println(exists);

        //2 获取文件路径和文件名称
//        System.out.println("文件构造路径:"+file.getPath());
//        System.out.println("文件名称:"+file.getName());

        //3 public boolean isDirectory()` :此File表示的是否为目录。
        //- `public boolean isFile()` :此File表示的是否为文件。
//        System.out.println(file.isDirectory());
//        System.out.println(file.isFile());

        //相对路径
        //    ./  当前目录下
        //  ../   上层目录   ../../

        //- public boolean createNewFile()` :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
        //- `public boolean delete()` :删除由此File表示的文件或目录。  只能删除空目录。
        //- `public boolean mkdir()` :创建由此File表示的目录。单层目录
        //- `public boolean mkdirs()` :创建由此File表示的目录,包括任何必需但不存在的父目录。 多层目录

        File  f = new File("E:\\aaa.txt");
//        System.out.println(f.exists());
        boolean newFile = f.createNewFile();
//        System.out.println(newFile);
//        System.out.println(f.exists());

        File f1 = new File("E:\\atguigu0224");
//        System.out.println(f1.exists());
        boolean mkdir = f1.mkdir();
//        System.out.println(mkdir);
//        System.out.println(f1.exists());

        File f2 = new File("E:\\wwww\\abcd");
        boolean mkdir1 = f2.mkdir();
       // System.out.println(mkdir1);

        boolean mkdirs = f2.mkdirs();
       // System.out.println(mkdirs);

        boolean f1delete = f1.delete();
       // System.out.println(f1delete);

        boolean f2delete = f2.delete();
       // System.out.println(f2delete);

        File dir = new File("E:\\wwww");

        //获取当前目录下的文件以及文件夹的名称。
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yhblog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值