回顾:
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));
}
}