HashMap 集合架构总结 file-Input输入 Output输出

回顾:
1.比较器 Comparator Comparable
Collections.sort(list, comparator)
1.不传比较器,按照默认规则排序 - Comparable
2.传指定比较器,按照比较器规则排序 - Comparator
Arrays.sort

内部类:
	成员内部类
	静态内部类:源码
	匿名内部类:实例化 接口/抽象类,一次性使用
	局部内部类

2.TreeSet -> Comparable
指定比较器的TreeSet
3.Map - key-value 键值关系
Object put(key, value)
Object get(key)
Object remove(key)

 迭代map的三种方式 
 	keySet
 	values
 	entrySet -> Entry

=========================================================
HashMap -> HashSet
HashSet就是HashMap的key的部分
TreeSet就是TreeMap的key的部分

HashSet的存储过程 -> HashMap的存储过程
	1.hashCode()计算位置
	2.位置上如果没有元素,直接加入
	3.位置上有元素,对比判断equals()方法比较
		a.相等,不添加
		b.和位置上的链表每一个节点判断不相等,添加到链表末尾

因为链表的访问效率很低,所以要尽量使每个位置上的链表,长度要短
这就要求容量大,但是考虑到空间使用率,容量不能无限大,默认初始容量jdk提供16

后期数据量太大,要扩容
	不能存满再扩容
扩容:容量改变,原来集合中的对象复制到新扩容的集合中,要重新计算位置
	 需要消耗时间,所以不能频繁扩容
	 综合考虑,当集合存储到75%的时候,进行扩容一倍
	
结论:HashMap初始容量16
	 加载因子 0.75

 
HashMap
Hashtable  (ArrayList/Vector, StringBuilder/StringBuffer)
ConcurrentHashMap - HashMap

LinkedHashMap:按照插入顺序排列

总结:集合架构

Collection -> Iterable
|- List
|- ArrayList/LinkedList/Vector
|- Set
|- HashSet
|- SortedSet(I) - TreeSet
|- Queue
|- Deque
|- LinkedList
|- Stack

Map
|- HashMap
|- Hashtable
|- ConcurrentHashMap
|- LinkedHashMap
|- Properties
|- TreeMap

线性:顺序结构、链表结构、队列、栈
散列:哈希值
二叉树:中序遍历

java.lang : System Math String StringBuilder
java.util : Date Calendar Collection Map
java.text : DateFormat
java.io : Input输入 Output输出


java.io : Input输入 Output输出
文件:读/写
程序:输入/输出

File:new File(路径) -> 表示文件/目录
只是在内存中创建的虚拟对象,和磁盘中有没有这个文件无关

文件的存储,都是以字节为单位的

路径:
相对路径:. … ~ 直接
参考值:当前目录
绝对路径:从盘符开始 Windows:C/D/E/F…
Linux:/ -> 根目录
C:\User\xx\Desktop

通过相对路径动态获得绝对路径!

xx.java -> xx.class
src     -> bin
src路径不要出现在代码中
获得类路径下的资源
	类.class.getResource().getFile() - 基于类的同包
    类.class.getClassLoader().getResource().getPath() - 基于src

作业:
day06:00~06
笔记整理CSND

File

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Arrays;

import org.junit.Test;

public class FileDemo {
@Test
public void test01() throws IOException {
//相对工程 .当前目录 … 上一级目录

	File file = new File("d.txt");
	File file1 = new File("c.txt");
	File file2 = new File("a/b/c");
	//常用API
	//是否是文件
	System.out.println(file1.isFile());
	//是否是目录
	System.out.println(file1.isDirectory());
	//file是否存在
	System.out.println(file1.exists());
	//创建文件 (file不存在才可以)
	boolean isSuccess = file.createNewFile();
	System.out.println(isSuccess);
	//创建目录(mkdir->创建目录 mkdirs->连同父级目录一起创建。)
	file2.mkdirs();
	//获得文件名
	System.out.println(file1.getName());
	//获得文件大小
	System.out.println(file1.length());
	//获得文件最后修改时间
	System.out.println(file1.lastModified());
	//删除文件
	//    file.delete(); 删文件/空目录 (不可以直接删除父级文件)。
}


@Test
public void test02() {//1⃣️在包里查找。
	//src/java_07/a.txt
	//getClass() -> 对象对应的类型
	//等同于类.class得到的内容
	//new FileDemo().getClasss()
	//getResource()获得资源 - 同包下的资源 - 类路径classpath - src编译后的路径
	String path =FileDemo.class.getResource("a.txt").getFile();
	System.out.println(path);
}

@Test
public void test03() {//2⃣️在src里查找。
	//src/b.txt
	//String path = FileDemo.class.getResource("../b.txt").getFile();
	//getClassLoader()获得类加载器 -- 类路径classpath
	String path = FileDemo.class.getClassLoader().getResource("b.txt").getPath();
	System.out.println(path);
}

@Test
public void test04() {
	File file = new File("a");
	//列出a中所有的文件/目录
	File[] fs = file.listFiles();
	System.out.println(Arrays.toString(fs));
}

@Test
public void test05() {
	File file = new File("a");
	File[] fs = file.listFiles(new FileFilter() {//内部类
		/**
		 * accept 过滤a目录中每一个file对象 pathname
		 * @return true:保留这个file对象
		 * 			false:过滤掉这个file对象 - 不要
		 */
		public boolean accept(File pathname) {
			//需要保留所有的文件,不要目录

// return pathname.isFile();
//保留所有的.java文件
return pathname.getName().endsWith(".txt");
}
});
System.out.println(Arrays.toString(fs));
}
}

你可能感兴趣的:(Java,day17)