JavaSE基础(day16)(1)Set接口(2)Map接口(3)异常(4)File类(5)I/O流

版权声明:cxyo.cn https://blog.csdn.net/weixin_44075537/article/details/85002143

默写:
1.画图题
画出集合框架的两张图。

2.编程题
假定已有Student类,使用List接口的引用指向实现类的对象,创建3个学生对象放入集合中,分别使用两种方法遍历,最后清空集合中的所有元素。

今天内容:
(1)Set接口
(2)Map接口
(3)异常
(4)File类
(5)I/O流

1.Set接口(重点)
1.1 基本概念
java.util.Set接口是Collection接口的子接口,元素没有先后次序,不允许重复元素
该接口的主要实现类有:HashSet类 和 TreeSet类。
其中HashSet类的底层是采用一张哈希表来实现的。
其中TreeSet类的底层是采用一棵二叉树来实现的。

1.2 常用的方法
该接口的方法与Collection接口的方法完全一致。
Iterator iterator() - 用于获取当前集合中的迭代器,用于遍历集合中所有元素

1.3 迭代器的使用
boolean hasNext() - 用于判断当前迭代器指向的集合中是否有元素可以遍历/访问。
E next() - 用于获取可以访问的元素,并指向下一个元素。
- 返回获取到的元素值。
void remove() - 用于删除上一次获取到的元素值。

注意:
当使用迭代器遍历集合中的元素时,若需要删除元素则必须使用迭代器自己的remove()方法,不能使用集合的remove()方法,否则会引发并发修改异常。

1.4 增强版的for循环(for each结构)
(1)语法格式

   for(元素类型 变量名 : 集合名称/数组名称){
       循环体;
   } 

(2)执行流程
不断地从集合/数组中取出一个元素赋值给前面的变量,直到处理完毕所有元素为止。

总结:
对于Set集合来说的遍历方式有三种:toString()、迭代器、for-each结构。
对于List集合来说的遍历方式除了上述三种之外,还多了一种get()方法。

1.5 元素放入HashSet集合的过程(尽量理解)
(1)使用元素调用hashCode()方法,得到该元素的哈希码值。
(2)将哈希码值交给哈希算法,算出该元素在哈希表中的索引位置。
(3)若该索引位置没有元素,则直接将新元素插入该位置。
(4)若该索引位置有元素,则需要比较新元素与已经存在的元素是否相等。
(5)若相等,则放弃新元素的插入,保留旧元素。
(6)若不相等,使用新元素与后续元素继续比较,若都不相等,则插入到最后。

1.6 TreeSet类
(1)什么是二叉树?
二叉树就是指每个节点最多只有两个子节点的树形结构。

(2)什么是有序二叉树?
满足以下三个特征的二叉树叫做有序二叉树,又叫做二叉查找树。
a.要求左子树中任意节点的元素值都小于根节点元素值。
b.要求右子树中任意节点的元素值都大于根节点元素值。
c.左右子树的内部也依然满足上述规则。

(3)元素放入TreeSet类时需要指定比较大小的规则:
a.使用元素的自然排序来指定,实现java.lang.Comparable接口,重写compareTo方法
b.使用比较器来指定,实现java.util.Comparator接口,重写compare方法。
该比较器由创建Set集合时的构造方法传入。
c.比较器指定大小规则的优先级高于自然排序,若没有比较器则默认采用自然排序。
自然排序的规则比较单一,而比较器排序的规则可以通过匿名内部类多元化处理。

1.7 常用的工具类
java.util.Arrays类是有关数组操作的工具类,里面提供大量操作数组元素的方法。
java.util.Collections类是有关集合操作的工具类,里面提供大量操作集合的方法。

2.Map接口(重点)
2.1 基本概念
java.util.Map<K,V>接口用于存放键值对的集合,其中键不允许重复,一个键只能对应一个值。
该结构的主要实现类有:HashMap类、TreeMap类以及 Hashtable类(笔试)。
其中HashMap类的底层是采用哈希表来实现的。
其中TreeMap类的底层是采用红黑树来实现的。

2.2 常用的方法
boolean isEmpty() - 用于判断当前集合是否为空。
int size() - 用于获取当前集合中的键值对个数。

V put(K key, V value) - 用于将参数指定的key和value组成一对放入当前集合。
- 若当前集合中没有key,则相当于增加的功能返回null。
- 若当前集合中有key,则相当于修改的功能返回之前key关联的value。
V remove(Object key) - 用于根据参数指定key来删除对应的键值对,返回之前value
boolean containsKey(Object key) - 用于判断参数指定的key是否存在。
boolean containsValue(Object value) - 用于判断参数指定的value是否存在。
V get(Object key) - 根据参数指定的key来返回对应的value。

Set<Map.Entry<K,V>> entrySet() - 用于将当前集合转换为Set视图并返回。
K getKey() - 用于获取当前元素中的key值。
V getValue() - 用于获取当前元素中的value值。
Set keySet() - 用于将当前集合中的key值转换为Set视图并返回。

视频
javaseday16-Set接口方法和迭代器的使用-01
https://v.qq.com/txp/iframe/player.html?vid=r0799zrlvhl
javaseday16-增强版for循环和TreeSet类-02
https://v.qq.com/txp/iframe/player.html?vid=i07996lhvsd
javaseday16-TreeSet类的使用-03
https://v.qq.com/txp/iframe/player.html?vid=h07990p2n96
javaseday16-TreeSet类自然排序比较器排序-04
https://v.qq.com/txp/iframe/player.html?vid=a0799kx32k2
javaseday16-Map接口的概念和方法使用-05
https://v.qq.com/txp/iframe/player.html?vid=c0799mx1yn5
javaseday16-Map接口方法使用和原理介绍-06
https://v.qq.com/txp/iframe/player.html?vid=l0799hgcekt
代码
https://pan.baidu.com/s/18bspumlfv7Z5cVy-2j4ysA

作业:
1.复习和总结集合类的所有内容。
2.继续编写学生信息管理系统,有余力的同学编写联系人列表信息。

猜你喜欢

转载自blog.csdn.net/weixin_44075537/article/details/85002143