Map集合实现类
TreeMap集合
- 概述:是一个双列集合,是Map集合的实现类
- 特点:
(1)集合中的key值是唯一的,元素是无序的
原因:
Key值去重和无序的方式,和TreeSet集合原理相同
(2)TreeSet集合和TreeMap集合的关系:
TreeSet集合底层是由TreeMap实现的
HashMap集合
- 概述:是一个双列集合,属于map集合的实现类。
- 特点:
(1)集合中的key值不可以重复,元素是无序的
原因:
Key值去重和无序的方式,和HashSet集合的原理相同
(2)HashSet集合和HashMap集合的关系:
HashSet集合底层是由HashMap集合实现的
验证:
创建一个HashSet集合,底层创建了一个HashMap集合
操作HashSet集合中的元素,其实就是在操作HashMap集合中的key值
LinkedHashMap集合
- 概述:是一个双列集合,是HashMap集合的子类
- 特点:
(1)本类没有特殊的方法,只能使用父类中继承的
(2)集合中元素有序(存入和取出)
可以跟根据key值保证元素的有序,可以记录下一个key的地址
(3)集合中的key值唯一
HashMap和Hashtable的关系
- HashMap和Hashtable都是用于存储键和值的对应关系,都是Map的实现类,都是使用 哈希表的方式存储。
- 不同点:
1、版本不同,Hashtable是jdk1.0版本出现的,HashMap是jdk1.2版本出现的
2、线程安全性不同,Hashtable是线程安全的,HashMap是线程不安全的如果后续在多线程情况下需要使用线程安全的集合, 可以使用工具类中的方法来获取
3、HashMap集合操作元素的效率高,HashTable集合操作元素的效率低
4、Hashtable不能存储null键null值,HashMap可以存储null键null值
线程安全不安全类型总结
- StringBuilder:线程不安全,效率高 单线程使用
StringBuffer:线程安全,效率低 多线程使用 - HashTable:线程安全,效率低(不使用)
HashMap:线程不安全,效率高
synchronizedMap(Map<K,V> m) :可以将线程不安全的集合,转为线程安全的集合 - Vector:线程安全,效率低:(不使用)
ArrayList:线程不安全,效率高
synchronizedList(List list) :可以将线程不安全的单列集合转为安全的集合
Collections工具类
- 概述:本类是JDK提供的操作集合的工具类,类中定义了操作数组中的方法,可以使用类名直接使用
- 常用方法:
(1)binarySearch(List<? extends Comparable<? super T>> list, T key) :
通过二分查找法查找元素key在集合中的索引
(2)frequency(Collection<?> c, Object o) :
获取集合中o元素出现的次数
(3)max(Collection c)
求出集合中的最大值
(4)min(Collection c)
求出集合中的最小值
(5)reverse(List<?> list)
反转集合中的元素顺序
(6)shuffle(List<?> list)
随机排列集合元素的顺序
(7)sort(List list)
将集合中的元素进行升序排列
(8)swap(List<?> list, int i, int j)
交换集合中两个元素的位置
(9)synchronizedList(List list) :
将线程不安全的单列集合可以转换为安全的单列集合
(10)synchronizedMap(Map<K,V> m):
将线程不安全的双列集合转为安全的双列集合
File类
File类
- 概述:可以操作磁盘上文件或者文件夹的类型
可以通过将文件或者文件夹的路径封装为File类对象,通过类中提供的方法操作
此类在io包,需要导包 - 路径:描述文件夹或者文件在计算机上位置的字符串
分类:
绝对路径:带着盘符的路径,从根目录开始的路径
相对路径:在父级路径下的一个子级路径
在eclipse中,写出的路径只要不是一个绝对路径,就是相对当前工程
构造方法
- File(String pathname) :将参数描述的字符串路径封装为一个file对象
- File(String parent, String child) :将两个字符串拼接之后的路径封装为一个file对象
- File(File parent, String child) :将第一个参数描述的file对象路径,和第二个参数字符串拼接之后的路径再封装到一个新的对象中
File类的创建方法
- createNewFile() :创建一个文件
- mkdir() :创建一个文件夹,如果父级路径不存在,就不能创建成功
- mkdirs() :创建一个文件夹,如果父级路径不存在,连着父级路径一起创建
File类的删除功能
- delete() :删除调用者所描述的文件或者文件夹
注意:
1、不能删除非空文件夹
2、删除后不走回收站
File类的重命名
- renameTo(File dest) :
注意:
1、参数不是一个字符串,而是一个改名之后的位置字符串所属的file对象
2、如果在同一个文件夹中,就是重名
3、如果在不同文件夹中,就是剪切
File类的判断功能
- exists() :判断调用者描述的文件或者文件夹是否存在
- isDirectory() :判断调用者是不是一个文件夹
- isFile() :判断调用者是不是一个文件
- isAbsolute() :判断调用者描述的路径是不是一个绝对路径
File类的获取功能
- getAbsolutePath():返回绝对路径
- getPath():获取相对路径
- getName():获取调用者描述的文件名或者文件夹名
- length():获取文件中的字节大小
此方法只能适用于文件的对象使用,不适用于文件夹的对象
数据只能在文件中直接储存,不能直接在文件夹中储存 - list():获取当前调用者目录下所有的文件和文件夹的名称到一个字符串数组中
- listFiles():获取当前调用者目录下所有文件和文件夹的名称之后,再将每个名称字符串封装为一个个file对象,到一个File数组中
递归
递归
- 概念:递:逐渐的传递 归:归来 回去,回到一种原始的状态
逐渐的回到一种原始的状态
在java语言中,方法自己调用自己,就是递归的使用方式 - 递归的特点:
(1)如果方法要使用递归需要两个分支。
第一条分支是方法调用自己的分支,是为了逐渐的解决问题
第二条分支是为了结束自己的分支,如果不结束自己那么方法自己调用自己就无法停止,随着方法的反复嵌套调用,内存也会不够用,程序会出现错误问题。 - 好处:
1、使用简单的逻辑,来完成复杂的问题 - 缺点:
1、使用递归对内存有很大的要求,可能会出现错误 StackOverflowError栈内存溢出异常
2、使用递归解决问题的效率降低了