异常、集合、泛型

1.异常:
(1)try:执行可能产生异常的代码
(2)catch:捕获异常
(3)finally:无论是否发生异常,代码总能执行throw:抛出异常,位于方法体内部,可作为单独语句使用,抛出一个异常对象,且只能是一个
(4)throws:声明方法内抛出了异常,必须跟在方法参数列表后面,不能单独使用,声明抛出异常类型,可以跟多个异常。
(5)调用方法输出异常信息:e.printStackTrace();
(6)异常对象常用的方法:voidprintStackTrace()输出异常的堆栈信息
(7)StringgetMessage()返回异常信息描述字符串,是printStackTrace()输出信息的一部分
(8)Exception异常层次结构的父类
①ArithmeticException算术错误情形,如以零作除数
②ArrayIndexOutOfBoundsException数组下标越界
③NullPointerException尝试访问null对象成员
④ClassNotFoundException不能加载所需的类
⑤IllegalArgumentException方法接收到非法参数
⑥ClassCastException对象强制类型转换出错
⑦NumberFormatException数字格式转换异常,如把"abc"转换成数字
(9)引发多种类型的异常
排列catch语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句演使用多重catch处理异常
异常分为Checked异常和运行时异常 Checked异常必须捕获或者声明抛出 运行时异常不要求必须捕获或者声明抛出 try-catch-finally中存在return语句的执行顺序
2.集合:
父接口Collection
子接口List
ArrayList:
线程不安全,多个线程同时访问同一个集合对数据结果不确定。
基于可变长度的数组,有下标的,访问快,随机访问或者查询效率高。
删除和修改效率低,因为需要涉及到移动元素,复制数组。
当我们需要对一些数据频繁查询的时候,删除和修
改少的时候,使用ArrayList最为合适。
3.List接口的实现类:
(1)Vector和ArrayList一样,底层也是Object类型的数组,当我们调用无参构造方法的时候,初识长度直接赋值为10,扩容是原来集合长度的两倍。
(2)Vector是源自于JDK1.0,线程安全的,效率低。
(3)ArrayList源自于JDK1.2,非线程安全的,效率高。实际开发中我们通常使用多态的方式来创建对象,目的是为了以后方便代码维护。LinkedList:数据结构是基于双向链表的,每一个元素中包含元素本身和上一个元素的地址,下一个元素的地址。非线程安全的,增删,修改快,因为不需要移动元素,直接修改指针指向新的引用即可,查询效率低,没有初始化大小,理论上说没有数据大小上限。在我们需要遍历LinkedList结构的时候,千万不要使用普通for循环使用get来获取元素,因为每次获取一个对应的元素,都需要找到它相邻的那个元素,以此类推。
(4)LinkedList中的get方法是将当前的表结构中的元素一分为二去进行查找,即便如此,插叙效率也很低。
(5)ArrayList、Vector、LinkedList使用场景:ArrayList使用率较高,因为我们大多数系统中都是查询多,删除添加较少。指定位置添加、删除、正常添加要涉及到扩容,复制数组…效率低。比如我们经常访问的购物网站,查询很多次,才下单,下单相当于修改的操作或者删除。
(6)Vector和ArrayList特点是一样的,唯一区别就是线程安全,在我们需要线程安全的系统中,并且查询较多可以使用这个。
(7)LinkedList删除、添加效率高,因为不需要移动元素,查询较慢,不过我们使用增强for循环和迭代器相对而言,能够提高查询效率。
双向链表:增删快,查询慢,线程不安全。
单向链表:每一个元素都包含下一个元素的地址,也就是说我们可以通过当前元素,找到下一个,但是不能 找到上一个元素。
增强for循环和迭代器,在遍历线性表的时候,差异不大,因为有下标的存在。
4.泛型:
创建集合的时候,直接写在接口名称或者类名之后<类型>,表示规范约束我们当前的集合中的数据类型,统一。
在类声明的时候使用,这种方式表示创建当前类对象的时候,可以传入一个具体的类型,供当前类中的所有方法使用,起到一个约束并且便捷操作的效果。
声明接口的时候使用,这种方式表示在创建实现类的时候可以传入一个具体的类型,供当前接口中的所有方法使用,起到一个约束并且便捷操作的效果。
形参列表中使用泛型:

<?> 表示可以是任何类型。 <? extends 类型A> 表示 可以传入的泛型的规则为可以是类型A或者类型A的子类或者实现类。 <? super 类型B> 表示可以传入的泛型的规则为可以是类型B或者类型B的父类。 T type 类型。 E element 元素。 K key 键。 V value 值。 5.HashMap && 2.Hashtable: 信息有不同的编号的时候,可以使用HashMap,同时也不考虑线程安全。1)否&效率高2)是&效率低。 初始容量1)162)11。 扩容1)2倍2)2倍+1。 键值是否可以为null1)可以2)不可以。 遍历,是否有序,是否可重复 两者都是无序的,键不能重复,值可以,不能使用下标遍历,使用增强for循环或者迭代器遍历。 数据结构 链表加数组 因为数组查询效率高,但是增删慢,链表增删快,查询慢。 我们的Map集合将两者进行了结合。但是缺点是占用空间比较大。 6.Set集合: (1)HashSet&&LinkedHashSet:HashSet是无序的,不允许重复的,底层是HashMap实现的。 (2)LinkedHashSet 依然是不允许重复的,但是是有序的。 (3)Collections工具类:Collections是JDK给我们 提供的一个工具类,本类中有一些方法用于操作集合。 Max方法,用于比较元素最大。 Min方法,用于比较元素最小。如果当前这个元素是我们自定义的数据类型,也可以比较,但是我们需要实现comparable接口,然后重写compareTo这方法,按照我们自己定义的规则比较。就能实现比大小,排序。binarySearch方法用 于实现查 找某个元素在集合中存在的位置,必须先排序,才能实现查找,否则查找结果不正确。 7.TreeSet&TreeMap: (1)TreeSet是SortedSet接口的实现类,本来要求我们自定义 的对象 必须 实现Compara ble这个接 口,并且制定比较规则 ,不 允许插 入两个对象使用compareTo方法比 较返回为0的元素 。这个类有序,可以保证我们的集合的顺序。底层实现的TreeMap。 (2)TreeMap是SortedMap接口的实现类,这个类实现了一个可排序的Map集合。Properties类,也是属于一个Map的实现类,在以后我们的开发中,我们将使用此类作为配置文件

猜你喜欢

转载自blog.csdn.net/Surf_Lynn/article/details/105008501