Map集合
Map集合概述-Key,Value键值对
双列集合,用于保存具有映射关系的数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szpAMUUM-1659767446742)(Map集合.png)]
常用方法
返回值类型 | 方法名 | 含义 |
---|---|---|
V | put(K key, V value) | 把指定的键与指定的值添加到Map集合中 |
V | remove(Object key) | 如果存在(从可选的操作),从Map集合中删除指定的键 所对应的键值对元素,返回被删除元素的值 |
V | get(Object key) | 根据指定的Key来获取Map集合中的值 |
Set<K> | keySet() | 获取Map集合中所有的键,存储到Set集合中 |
Set<Map.Entry<K,V>> | entrySet() | 获取到Map集合中所有的键值对对象的集合,该集合是Set集合 |
Collection<V> | values() | 获取Map集中的所有值,并放在Collection集合中 |
示例
package com.qfedu.Test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @Author pengyu
* @Date 2022/8/6 10:58
*/
public class Demo01 {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
//添加key-value
map.put(1,"曼曼");
map.put(2,"李华");
map.put(4,"依依");
map.put(3,"涵涵");
System.out.println(map); //{1=曼曼, 2=李华, 3=涵涵, 4=依依}
map.remove(3);
System.out.println(map); //{1=曼曼, 2=李华, 4=依依}
System.out.println(map.get(4)); //依依
System.out.println(map.containsKey(2)); //true
Set<Integer> set = map.keySet();
System.out.println(set); //[1, 2, 4]
Set<Map.Entry<Integer, String>> entries = map.entrySet();
//遍历集合entries
for (Map.Entry<Integer, String> entry : entries) {
System.out.println(entry);
//1=曼曼
//2=李华
//4=依依
}
Collection<String> values = map.values();
//遍历集合values
for (String value : values) {
System.out.println(value);
//曼曼
//李华
//依依
}
}
}
HashMap
简单介绍
HashMap是Map集合中比较常用的实现类,特点也是根据哈希值进行存储,存储数据采用的哈希表结构(JDK8改为hash表+红黑树),元素的存取顺序不一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap
LinkedHashMap继承自HashMap,它的多种操作都是建立在HashMap操作的基础上的。同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序。
File类
主要用于文件和目录的创建、查找和删除等操作
构造方法
- public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
- public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
- public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
成员方法
大多常用的方法都在示例中存在
package com.qfedu.Test;
import java.io.File;
import java.io.IOException;
/**
* @Author pengyu
* @Date 2022/8/6 14:00
*/
public class Demo03 {
public static void main(String[] args) throws IOException {
//我在我的电脑D盘下面有这个aaa文件夹,并且该文件夹下面还有文件夹和文件
File file = new File("D:"+ File.separator + "aaa");
//判断该文件是否存在
System.out.println(file.exists()); //true
//获取当前文件的绝对路径
System.out.println(file.getAbsolutePath()); //D:\aaa
//获取当前文件的名字
System.out.println(file.getName()); //aaa
//将此File转换为路径名字符串。
System.out.println(file.getPath()); //D:\aaa
//判断当前文件是否是文件夹
System.out.println(file.isDirectory()); //true
//判断当前文件是否是文件
System.out.println(file.isFile()); //false
//返回此抽象路径名表示的文件上次修改的时间。
System.out.println(file.lastModified()); //1659697522993,时间戳从1970.1.1,00:00:00
//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list = file.list();
for (String s : list) {
System.out.println(s);
//3.txt
//bbb
//ccc
}
//返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
//D:\aaa\3.txt
//D:\aaa\bbb
//D:\aaa\ccc
//删除由此抽象路径名表示的文件或目录。 返回值是布尔类型的值
//file.delete();
//如果路径中没有文件,会创建一个新的文件,需要throws IOException
//file.createNewFile();
//测试此抽象路径名命名的文件是否为隐藏文件。
System.out.println(file.isHidden()); //false
//创建由此抽象路径名命名的目录。 返回值是布尔类型的值
//file.mkdir();
//创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。返回值是布尔类型的值
//file.mkdirs();
}
}
}
递归
递归:我自己调用我自己,即当前方法调用本身
分类
- 直接递归:自身调用自己
- 间接递归:方法1调用方法2,方法2调用方法3,方法3调用方法1
注意
递归一定要有条件,能够使用递归停下来,不然会内存移除
案例:找到指定文件夹下的所有文件
package com.qfedu.Test;
import java.io.File;
/**
* @Author pengyu
* @Date 2022/8/6 14:19
*/
public class Demo04 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "aaa");
recursion(file);
}
public static void recursion(File file) {
/**
* 判断如果是文件夹,我们就遍历其所有文件,
* 将这些文件再次调用recursion(File file),知道找到所有文件进行输出
*/
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File file1 : files) {
recursion(file1);
}
} else {
System.out.println(file.getName());
}
/**
* 控制台输出:
* 3.txt
* 1.txt
* 2.txt
*/
}
}