1. 第十八天回顾
Set特性,无序,不重复,无下标
HashSet 保证唯一性,存储对象自己的hashCodeequals方法,底层哈希表,线程不安全,查询速度快
hashCode equals方法面试题,hashCode协定
TreeSet 会排序,依据是存储对象的自然顺序或者集合自己依靠比较器来排序
自然顺序,类实现Comparable,重写compareTo方法
实现类,实现Comparator,重写compare方法,TreeSet构造方法中,传递比较器对象
底层是二叉树,线程不安全集合
Map集合,存储两个对象的键值对,键唯一的,只能映射一个值
Map接口方法 put get containsKey containsValue keySet entrySet
2. 第十九天学习内容:Map集合取出两种方式,HashMap,TreeMap,LinkedHashMap,Hashtable, Properties。Collections工具类,数组和集合的互转,静态导入,可变参数。异常
3. Map集合第一种取出方法ketSet方法
代码少,简单易懂
Set<Key> keySet() 将Map集合中所有的键,存储到Set集合
迭代Set集合,获取到Map中所有的键
使用Map中的方法get()获取集合中的值
4. 内部接口
接口中,还有接口
interface XX{
interface YY{}
}
内部接口都是静态修饰,直接写外部接口名.内部接口
实现类,可以实现任意接口,实现哪个接口,重写哪个接口方法,没有必要实现外部,重写内部
Map集合第二种取出方法,内部接口原理
5. Map集合第二种取出方法entrySet方法实现
代码多,不好理解,开发不常用,面试常用
利用集合的键值对关系对象,获取,拥有结婚证,找结婚证上的两个人
键值对关系被Java进行了对象的封装,描述类,是个接口,是一个内部接口Entry,他是Map接口中的一个内部接口 Map.Entry.此接口的实现类对象,就是这个键值对关系对象。
entrySet()返回值是一个Set集合,这个Set集合,存储的是键值对的关系对象Map.Entry,
Map.Entry写泛型,集合中的键值对
Map.Entry接口中的方法:getKey()获取键 getValue()获取值
6. 增强for能不能遍历Map集合
for循环不能直接遍历Map集合,但是可以间接遍历
Map集合取出就是在Set帮助,for可以遍历Set集合的
7. HashMap类
基于哈希表的映射键值对,线程不安全,可以存储null值,null键,无序集合
要求最为键的对象,必须保证唯一性,对象重写hashCode和equals方法
8. LinkedHashMap
是HashMap的子类,基于链表的哈希表实现,有序的Map集合,线程不安全的,开始版本JDK1.4
9. Hashtable
底层数据结构也是哈希表,但是不允许存储null,线程安全,运行速度慢。开始版本JDK1.0、
但是没有集合框架以前,存储键值对,只能依靠Hashtable,被HashMap取代,郁郁而终了。
但是他有一个子类Properties,依然活跃在开发舞台,这个集合可以和IO流配合使用
10. TreeMap集合
对存储的键进行排序,需要对象的自然顺序,或者比较器,用法和实现代码,直接参考HashSet集合
线程不安全集合,运行速度快,底层实现红黑树,自然平衡算法二叉树
11. 集合的嵌套演示
数据的结构,数据存储到集合,并遍历,2中方式
传智播客:基础班,就业班
基础班有学生 : 001 张三 002 李四
就业班有学生 : 001 王武 002 赵柳
设计,一个集合传智播客,包含两个小集合,分别是基础班和就业班。
基础班和就业班的集合中,包括每个同学
一个Map中,存储2个小Map,2个小Map中,存储的是学生学号和姓名
Map<String,Map<String,Strng>>czbk 实现遍历,需要嵌套循环
12. Map集合的练习
计算一个字符串中,每个字符出现多少次
abcdabegef : 结果 字符a出现1次,字符b出现2次,字符c出现1次
a=1 b=2
eclipse程序调试功能 debug 断点调试
F6 一步向下 F5 进入方法体
13. Properties类
Hashtable的子类,也是一个线程安全的键值对的集合
这个类不同于其他集合,可以和IO流结合使用,实现数据的永久性存储
查看API发现这个集合没定义泛型,泛型已经被设定好了,键值对的数据类型都是字符串。完全适用于Map中的一切操作
特有方法setProperty(String key,String value)等同于就是Map中的put
getProperty(String value)传递键,返回对应的值,等同于Map中的get方法
以后可以用于配置文件。eclipse在workspace文件夹下,存储了文件,文件就是他的配置文件,窗口,字体,等等信息,写在配置文件中,都是键值对,重启eclipse的时候,读取配置文件中的信息
14. 集合工具类Collections
专门操作集合的工具类,方法全部静态
Collections类中的方法
l static void sort(List list)根据存储在集合的对象的自然顺序,对List集合排序
l static void sort(List list,Comparator com)根据比较器对List集合排序
l static Comparator reverseOrder()返回比较器,逆转对象的自然顺序
l static Comparator reverseOrder(Comparator c)传递比较器,返回比较器,返回的比较器逆转了传递的比较器
l static int binarySearch(List list, Object key)集合的折半查找,传递List集合必须有序,找到返回下标,找不到返回-插入点-1
l static void fill(List list,Object obj)填充集合
l static void swap(List list ,int x,int y)指定下标,对List集合中的对象换位置
l static void shuffle(List list)对List集合中的对象,随机换位置
l 将线程不安全集合变成线程安全集合 synchronized开头的方法
15. 集合数组的互转
数组转成集合 Arrays类方法isList , 传递数组,返回集合
数组转成集合后,改变集合长度不能做,如果做了,出现不支持的操作异常
集合转数组Collection中方法 toArray() 将集合转成数组,传递数组,返回数组
16. 静态导入
JDK1.5的新特性,简化书写
import static ...静态成员或者是静态方法
17. 可变参数
JDK1.5的新特性
定义方法啊,计算两个正数和,返回结果,计算的整数的个数在无限的增长
采用可变参数处理
格式
修饰符 返回值类型 方法名 (数据类型...变量){}
可变参数的使用条件:当定义一个方法时候,参数的数据类型已知,但是参数的个数不同,可变参数就是一个数组
可变参数的使用注意事项:
l 一个方法中,只能定义1个可变参数
l 如果方法中有多个参数,可变参数只能写咋参数列表的最后
18. 异常的概述
异常:程序的运行时候出现的不正常现象
异常的产生过程和处理方式
异常产生,是JVM创建的一个对象,抛给调用者,如果调用者不处理,继续抛出,直到JVM接收到异常后,终止程序。
异常也是对象,既然是对象,对象的描述类,ArithmeticException类是用来描述数学中的算术问题的类
NullPointerException,描述空指针异常的类
ArrayIndexOutOfBounds 描述数组越界异常类
19. 异常的继承体系
Throwable,类是所有异常和错误的父类
|-- Error 错误
|-- Exception 异常
错误:程序出现了严重的问题,不修改代码,根本不能运行,人得了非典,艾滋,癌
异常:程序出现了比较轻的问题,处理掉之后,继续运行,人得了阑尾炎,感冒
Exception类是所有异常的父类
|-- 非RuntimeException
|-- RuntimeException
Throwable中的方法:
l String toString()重写Object类的方法,异常信息的详细描述?
l String getMessage() 返回异常信息的简短描述
l void printStackTrace() 异常信息输出到控制台
20. 异常的第一种处理方式 try catch处理
格式
try{
检测的代码
有可能发生异常的代码
}catch(异常类 变量){
异常的处理方式(循环,判断,调方法)
有catch,就可以称为异常被处理了
}
21. 异常的第二种处理方式,抛出异常
throw 手动抛出异常,后面写的是new 异常对象
throws 方法声明抛出异常,后面写的是异常类
throw 写在方法中,throws写在方法的声明上
22. finally代码块
finally可以跟随try出现,也可以跟随try...catch出现
finally代码块中的程序,必须要运行
finally实际的开发意义,释放资源
23.