Java map笔记
Map
-
是一个键值对的集合
花和尚
豹子头
鲁智深
林冲
-
如果想要从map中获得值,可以根据键
-
Map<Key,velue>
-
Map虽然是集合,但是和collection的接口无关
-
我们可以通过key来获得相应的值,每个键只能 映射一个值,一个映射不能包含重复的键。
-
Map<K,Y>表示泛型Map的key和value可以是任何类型(不能是基本数据类型)实际项目中K一般都是字符串类型。
-
HashMap:
-
map键是唯一的,collection子接口list集合中的与元素是可以重复的
-
数据成对出现
-
一个映射不能包括重复的键
-
其实键就是Set,Set元素唯一,只能有一个null,元素是无序的。Map键完全遵照Set的这几个特点
-
如果存在重复的Key 就会把之前的覆盖掉
-
值是可以重复的。
import java.util.Map;
import java.util.HashMap;
publicclass MapTest {
publicstaticvoid main(String[]args) {
Map<String,String> map = new HashMap<>();
map.put("豹子头", "林冲");
map.put("及时雨", "松江");
map.put("白日鼠", "白胜");
map.put("瞎蒙子", "白胜");
System.out.println(map);
}
}
-
值也是可以多个为空的!
-
HashMap的子类
-
HashMap的特点
-
主要特点和map相同,map和set特点相同,并且Hashmap不是线程安全的
-
两个线程同时修改HashMap中的数据的时候,就会出错。
-
可以将其变成线程安全,通过collections.`synchrolizedMap(map);可以通过这个方法将其变为线程安全的。
-
TreeMap 和TreeSet相同,他是有序的,根据Key来排序,
-
自己定义的类对象,如果想要进行排序需要在类中实现Comparable<Person>泛型对象
-
HashTable 与HashMap的区别在于他是线程安全的,不允许任何的null键和值,其余的都一样、
-
linkedHashMap是有顺序的,根据其添加顺序排序,而HashMap是没有顺序排序的。HashMap用的是最多的,其根据键的大小排序
文件
-
File类属于IO下的类
-
文件的构造器
文件对象的创建:
publicclass FileTest {
publicstaticvoid main(String[] args) {
//文件的构造器是用来创建文件对象的
//创建文件的时候要保证文件路径正确。以下是创建了个对象
File file = new File("E:\\FileTest.txt");//文件的绝对路径
//直接输出则会打出文件的路径
System.out.println(file);
//第二种创建方式
File file1 = new File("D:\\aaa","tx.txt");
System.out.println(file1.getName());
//java中的file类的对象可以代表目录,也可以代表文件
File file2 = new File("F:\\aaa");
System.out.println(file2.getName());
//3 根据目录文件创建一个文件
File file3 = new File(file2,"file3.txt");
System.out.println(file3.getName());
//文件构造器的三种方法掌握即可
}
}
-
文件的删除和创建
-
查看文件是否存在 exists()方法用来查看文件是否存在,存在则返回true否则返回false
//创建目录 //创建的时候上一层的路径必须正确 booleannewMkdir = file2.mkdir(); System.out.println(newMkdir); |
-
如果要同时创建多级目录则使用mkdirs方法
-
删除文件方法
-
file.delete();删除方法,删除后不在回收站,只删除一个文件。删除路径的最后一层,返回值为布尔型,如果文件夹中有文件的花不可删除,只有空目录才能删除。
-
文件的获取功能:
//文件的构造器是用来创建文件对象的
//创建文件的时候要保证文件路径正确。以下是创建了个对象
File file = new File("E:\\FileTest.txt");//文件的绝对路径
String absPath = file.getAbsolutePath();
System.out.println(absPath);
//相对路径就是当前项目的根:相对路径创建方法
//下面这种不指定路径直接创建文件的方法将把文件夹创建在和
//当前文件同一个文件夹中
File file1 =new File("sts.txt");
System.out.println(file1.getAbsolutePath());
//获得文件txt的大小,获得的是文件所占用的字节
System.out.println(file1.length());
//获得文件的最后修改时间 lastModified();
System.out.println(file.lastModified());
-
目录的子文件获取
-
//listRoots()该方法获取此电脑的根目录,并放到数组中; File[] file = File.listRoots(); System.out.println(Arrays.toString(file)); //获得一个目录下的子文件的对象listFiles也是放到数组中 //应用较多 File file1 = new File("E:\\A01-java"); File[] files = file1.listFiles(); System.out.println(Arrays.toString(files)); file1.list();//获得文件子文件的名字,主要还是使用listFiles方法 |
-
文件的判断:
File file = new File("E:\\A01-java\\bb"); System.out.println(file.exists()); //判断这个文件对象是否是文件isFile 返回布尔值 System.out.println(file.isFile()); //判断这个文件对象是否是目录返回布尔值 System.out.println(file.isDirectory()); //判断一个文件是否是绝对路径 System.out.println(file.isAbsolute()); File file1 = new File("E:\\A01-java//hellow.txt"); //查看文件是否可读的canRead或者是否可写 System.out.println(file1.canRead()); System.out.println(file1.canWrite()); //文件是否是隐藏的 isHidden System.out.println(file1.isHidden()); |
递归:
-
属于一种算法,方法本身调用本身:求5的阶乘
publicstaticvoid main(String[] args) { //求5的阶乘 /* * 5*4*3*2*1 = 5*4! * 4*3*2*1 = 4*3! * 3*2*1 = 3*2! * 2*1 = 2*1! * 1 = 1! */ System.out.println("五的阶乘"+fn(5)); } publicstaticint fn(intnum) { intresult = 1; if(num >1) { //方法的自身调用自身 result = num * fn(num-1); } returnresult; } |
-
文件的遍历:
-
递归查询文件夹下的所有文件:需要长时间翻看
//文件目录的层级
staticintlevel;
publicstaticvoid main(String[] args) {
//创建一个目录
File file = new File("E:\\Program Files\\Java");
pathFile(file);
}
publicstaticvoid pathFile(File file) {
if(file == null) {
return;
}
//给层级做加一
level++;
//获得自文件对象的子文件对象列表
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
//遍历这个子文件
for(File f : files) {
//打印层级缩进,是遍历的文件夹更好看
for(inti = 0; i<level; i++) {
System.out.print("\t");
}
System.out.println(f.getName());
if(f.isDirectory()) {
pathFile(f);
}
}
//本层次遍历完毕,把层级减回来
level--;
}
-
将文件夹中的非目录文件全删
//文件目录的层级
staticintlevel;
publicstaticvoid main(String[] args) {
//创建一个目录
File file = new File("E:\\A01-java");
pathFile(file);
}
publicstaticvoid pathFile(File file) {
if(file == null||!file.exists()) {
return;
}
//获得对象文件的子对象列表、
File[] f = file.listFiles();
for(File filee : f) {
if(filee.isDirectory()) {
pathFile(filee);
}else {
filee.delete();
}
//经过遍历删除文件后,这个文件夹就变成了空的则就可以删除文件夹了
//删除空文件夹
filee.delete();
}
}
-
-
Map
-
是一个键值对的集合
花和尚
豹子头
鲁智深
林冲
-
如果想要从map中获得值,可以根据键
-
Map<Key,velue>
-
Map虽然是集合,但是和collection的接口无关
-
我们可以通过key来获得相应的值,每个键只能 映射一个值,一个映射不能包含重复的键。
-
Map<K,Y>表示泛型Map的key和value可以是任何类型(不能是基本数据类型)实际项目中K一般都是字符串类型。
-
HashMap:
-
map键是唯一的,collection子接口list集合中的与元素是可以重复的
-
数据成对出现
-
一个映射不能包括重复的键
-
其实键就是Set,Set元素唯一,只能有一个null,元素是无序的。Map键完全遵照Set的这几个特点
-
如果存在重复的Key 就会把之前的覆盖掉
-
值是可以重复的。
import java.util.Map;
import java.util.HashMap;
publicclass MapTest {
publicstaticvoid main(String[]args) {
Map<String,String> map = new HashMap<>();
map.put("豹子头", "林冲");
map.put("及时雨", "松江");
map.put("白日鼠", "白胜");
map.put("瞎蒙子", "白胜");
System.out.println(map);
}
}
-
值也是可以多个为空的!
-
HashMap的子类
-
HashMap的特点
-
主要特点和map相同,map和set特点相同,并且Hashmap不是线程安全的
-
两个线程同时修改HashMap中的数据的时候,就会出错。
-
可以将其变成线程安全,通过collections.`synchrolizedMap(map);可以通过这个方法将其变为线程安全的。
-
TreeMap 和TreeSet相同,他是有序的,根据Key来排序,
-
自己定义的类对象,如果想要进行排序需要在类中实现Comparable<Person>泛型对象
-
HashTable 与HashMap的区别在于他是线程安全的,不允许任何的null键和值,其余的都一样、
-
linkedHashMap是有顺序的,根据其添加顺序排序,而HashMap是没有顺序排序的。HashMap用的是最多的,其根据键的大小排序
文件
-
File类属于IO下的类
-
文件的构造器
文件对象的创建:
publicclass FileTest {
publicstaticvoid main(String[] args) {
//文件的构造器是用来创建文件对象的
//创建文件的时候要保证文件路径正确。以下是创建了个对象
File file = new File("E:\\FileTest.txt");//文件的绝对路径
//直接输出则会打出文件的路径
System.out.println(file);
//第二种创建方式
File file1 = new File("D:\\aaa","tx.txt");
System.out.println(file1.getName());
//java中的file类的对象可以代表目录,也可以代表文件
File file2 = new File("F:\\aaa");
System.out.println(file2.getName());
//3 根据目录文件创建一个文件
File file3 = new File(file2,"file3.txt");
System.out.println(file3.getName());
//文件构造器的三种方法掌握即可
}
}
-
文件的删除和创建
-
查看文件是否存在 exists()方法用来查看文件是否存在,存在则返回true否则返回false
//创建目录 //创建的时候上一层的路径必须正确 booleannewMkdir = file2.mkdir(); System.out.println(newMkdir); |
-
如果要同时创建多级目录则使用mkdirs方法
-
删除文件方法
-
file.delete();删除方法,删除后不在回收站,只删除一个文件。删除路径的最后一层,返回值为布尔型,如果文件夹中有文件的花不可删除,只有空目录才能删除。
-
文件的获取功能:
//文件的构造器是用来创建文件对象的
//创建文件的时候要保证文件路径正确。以下是创建了个对象
File file = new File("E:\\FileTest.txt");//文件的绝对路径
String absPath = file.getAbsolutePath();
System.out.println(absPath);
//相对路径就是当前项目的根:相对路径创建方法
//下面这种不指定路径直接创建文件的方法将把文件夹创建在和
//当前文件同一个文件夹中
File file1 =new File("sts.txt");
System.out.println(file1.getAbsolutePath());
//获得文件txt的大小,获得的是文件所占用的字节
System.out.println(file1.length());
//获得文件的最后修改时间 lastModified();
System.out.println(file.lastModified());
-
目录的子文件获取
-
//listRoots()该方法获取此电脑的根目录,并放到数组中; File[] file = File.listRoots(); System.out.println(Arrays.toString(file)); //获得一个目录下的子文件的对象listFiles也是放到数组中 //应用较多 File file1 = new File("E:\\A01-java"); File[] files = file1.listFiles(); System.out.println(Arrays.toString(files)); file1.list();//获得文件子文件的名字,主要还是使用listFiles方法 |
-
文件的判断:
File file = new File("E:\\A01-java\\bb"); System.out.println(file.exists()); //判断这个文件对象是否是文件isFile 返回布尔值 System.out.println(file.isFile()); //判断这个文件对象是否是目录返回布尔值 System.out.println(file.isDirectory()); //判断一个文件是否是绝对路径 System.out.println(file.isAbsolute()); File file1 = new File("E:\\A01-java//hellow.txt"); //查看文件是否可读的canRead或者是否可写 System.out.println(file1.canRead()); System.out.println(file1.canWrite()); //文件是否是隐藏的 isHidden System.out.println(file1.isHidden()); |
递归:
-
属于一种算法,方法本身调用本身:求5的阶乘
publicstaticvoid main(String[] args) { //求5的阶乘 /* * 5*4*3*2*1 = 5*4! * 4*3*2*1 = 4*3! * 3*2*1 = 3*2! * 2*1 = 2*1! * 1 = 1! */ System.out.println("五的阶乘"+fn(5)); } publicstaticint fn(intnum) { intresult = 1; if(num >1) { //方法的自身调用自身 result = num * fn(num-1); } returnresult; } |
-
文件的遍历:
-
递归查询文件夹下的所有文件:需要长时间翻看
//文件目录的层级
staticintlevel;
publicstaticvoid main(String[] args) {
//创建一个目录
File file = new File("E:\\Program Files\\Java");
pathFile(file);
}
publicstaticvoid pathFile(File file) {
if(file == null) {
return;
}
//给层级做加一
level++;
//获得自文件对象的子文件对象列表
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
//遍历这个子文件
for(File f : files) {
//打印层级缩进,是遍历的文件夹更好看
for(inti = 0; i<level; i++) {
System.out.print("\t");
}
System.out.println(f.getName());
if(f.isDirectory()) {
pathFile(f);
}
}
//本层次遍历完毕,把层级减回来
level--;
}
-
将文件夹中的非目录文件全删
//文件目录的层级
staticintlevel;
publicstaticvoid main(String[] args) {
//创建一个目录
File file = new File("E:\\A01-java");
pathFile(file);
}
publicstaticvoid pathFile(File file) {
if(file == null||!file.exists()) {
return;
}
//获得对象文件的子对象列表、
File[] f = file.listFiles();
for(File filee : f) {
if(filee.isDirectory()) {
pathFile(filee);
}else {
filee.delete();
}
//经过遍历删除文件后,这个文件夹就变成了空的则就可以删除文件夹了
//删除空文件夹
filee.delete();
}
}
-
-