一.Map:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map接口中的方法概述
A:删除功能
void clear():移除集合中的所有键值对元素
V remove(Object key):根据键移除键值对元素,并返回值
B:判断功能
boolean containsKey(Object key):判断集合中是否包含指定的键
boolean containsValue(Object value):判断集合中是否包含指定的值
boolean isEmpty():判断集合是否为空
C:获取功能
Set<Map.Entry<K,V>> entrySet():获取键值对对象的集合,遍历键值对对象,
利用getKey(),getValue()取出键和值(理解即可)
V get(Object key):根据键获取值
Set<K> keySet():获取所有的键
Collection<V> values():获取所有的值
D:添加功能
V put(K key,V value):集合添加键值对
E:长度功能
int size():键值对对数。
Map 几个实现类 HashMap Hashtable LinkedHashMap TreeMap
1.HashMap 底层数据结构哈希表 特点:元素无序 且唯一 元素唯一 是靠元素重写 equlse方法和hashCode方法
2.TreeMap 底层数据结构是二叉树 它能够对元素进行排序 排序对元素有要求 要求元素实现 Comparable接口 重写 compareTo 方法 元素放置的顺序 就是根据这个方法的返回值正 负 0来确定
3.LinkedHashMap 底层数据结构是链表和哈希表 链表保证元素有序,哈希表保证元素唯一
4.Hashtable同步的 效率第 数据安全
// 常见方法
HashMap<Object, Object> hm = new HashMap<>();
// hm.put(key, value); 添加数据 第一次添加 返回值是null 再添加就会上一次的值 键相同 值覆盖
// hm.size() 获取集合长度
// hm.isEmpty()//判断集合是否为空
// hm.containsKey(key) 判断集合有没有这个键
// hm.containsValue(value) 判断集合有没有这个值
// hm.get(key) 根据键获取对应值
// hm.keySet() 获取所有的键的set集合
// hm.entrySet();// 获取所有的键值对 对象集合 Entry<Object, Object> 有两个方法 getKey 和
// getValue
// hm.values(); 获取所有值的集合
// hm.clear(); 清除所有的元素
// hm.remove(key) 根据键移除一对元素
二.HashMap与TreeMap的相同点与不同点
相同点:主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
不同点:
1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.根据键可以直接获取它的值,
具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
三. HashMap Hashtable 区别
HashMap非同步的 效率高 数据不安全
Hashtable同步的 效率第 数据安全
四.File
File:文件和目录(文件夹)路径名的抽象表示形式。
File的构造方法:
File(String pathname):把一个路径名称封装成File对象
File(String parent, String child):把一个父路径和一个子路径封装成一个File对象
File(File parent, String child):把一个父路径File对象和一个子路径封装成一个File对象
创建功能:
A:创建文件
public boolean createNewFile():如果文件不存在,就创建。否则,不创建。
B:创建目录
public boolean mkdir():如果目录不存在,就创建。否则,不创建。
public boolean mkdirs():如果目录不存在,就创建。否则,不创建。
即时父目录不存在,也可以连父目录一起创建。
删除功能:
public boolean delete():既可以删除文件,又可以删除目录。
路径问题:
A:绝对路径 就是以盘符开始的路径(d:\test\aaa\b.txt)
B:相对路径 就是不以盘符开始的路径(a.txt)
一般都是相对应当前的项目而言的。
注意事项:
:Java程序的删除不走回收站。
B:如果目录内还有内容就不能删除。
判断功能:
public boolean isDirectory():是否是目录
public boolean isFile():是否是文件
public boolean exists():是否存在
public boolean canRead():是否可读
public boolean canWrite():是否可写
public boolean isHidden():是否隐藏
获取功能:
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
数据类型:
字节流
字节输入流 InputStream(抽象类)
字节输出流 OutputStream(抽象类)
字符流
字符输入流 Reader
字符输出流 Writer
字符输出流
注意:一般我们在讨论IO的分类时,默认是按照数据类型分的。
字节输出流:OutputStream(抽象类)
因为OutputFile是抽象类,所以我们用他的子类FileOutputStream
构造方法:
FileOutputStream(File file)
FileOutputStream(String name)
五.异常:
就是程序出现的不正常的情况。
异常分类:
错误:这是非常严重的问题,一般我们处理不了。
异常:
编译时期异常 开始就必须要处理的,如果不处理,后面就走不了。
运行时期异常 开始可以不用处理。这种问题一旦发生,就是我们的程序问题,需要我们修改程序。
如何处理异常,保证各个部分不影响的呢?
两种方案:
A:try…catch…finally
B:throws
try…catch…finally:
try{
可能出现异常的代码
}catch(异常类名 变量名) {
针对异常的代码处理
}finally {
释放资源的地方
}
多个异常的处理(演示数组索引越界异常,除数为0异常)
A:针对每一个出现问题的地方写一个try…catch语句
B:针对多个异常,采用一个try,多个catch的情况。
try…catch…catch…
遇到try里面的问题,就自动和catch里面进行匹配。
一旦匹配就执行catch里面的内容,执行完毕后,接着执行后面的代码。
注意:
如果异常间有子父关系,父必须在最后。
编译时期异常和运行时期异常的区别:
编译时期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译
运行时期异常:无需显示处理,也可以和编译时异常一样处理
Throwable中的方法:(演示除数为0异常)
printStackTrace():打印异常信息,程序从出问题的地方开始就会打印创建一个该异常对应的对象, 该对象直接调用打印方法打印出异常信息
try…catch和throws的区别
try…catch 是直接进行了处理。
而throws则是把异常处理的事情交给了调用者。
throws用在方法上,声明方法有异常,交给调用者处理。
但是呢,如果是编译时期异常,调用就必须处理。
如果是运行时期异常,调用者可以处理,也可以不处理。