Java异常、集合
Java异常
异常:程序执行中发生的不正常情况称为异常
用于处理非预期的情况,比如文件没找到,网络错误,非法的参数
程序运行过程中发生的异常可分为两类
-
Error:JVM系统内部错误、资源耗尽等严重情况
-
Exception:其他因编程错误或偶然的外在因素导致的一般性问题
如:空指针访问
试图读取不存在的文件
网络连接中断
异常层次

异常处理
捕获异常和抛出异常
try、catch、finally的执行顺序
-
finally中的代码总会被执行,并且finally语句执行在return语句执行之后,返回之前。
-
如果finally语句中对返回数据变量做了改变,不会影响最终的返回结果,对引用变量做了改变,会影响最终的返回结果。
(finally是在return后面的表达式运算后执行的,此时并没有返回运算后的值,而是把要返回的值保存起来,不管finally中的代码怎样,返回的值都不会改变,仍然是之前保存的值)所以函数返回值是在finally执行前确定的。
-
finally中有return的话,会在try和catch的return返回前返回。
Java集合
java集合类存放于java.util包中,是一个用来存放对象的容器
- 集合只能存放对象。如果存一个int型数据1放入集合中,会被自动转换成Integer类后存入。
- 集合存放的是多个对象的引用,对象本身还是放在堆内存中。
- 集合可以存放不同类型,不限数量的数据类型。
集合可以分为Set、List、Map三种大体系
- Set:无序、不可重复
- List:有序、可重复
- Map:具有映射关系
Set
HashSet
继承关系:HashSet类-->Set接口-->Collection接口
HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能
特点:
- 不能保证元素的排列顺序
- 不可重复(hashCode不相同)
- HashSet不是线程安全的
- 集合元素可以使用null
当像HashSet集合中存入一个元素,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置。
如果两个元素的equals()方法返回true,但它们的hashCode()返回值不相等,hashSet将会将它们存储在不同的位置,依然可以添加成功。
Set方法
-
add
-
remove
-
clear
-
size
-
contains
-
遍历
-
迭代器遍历Iterator
Iterator it = set.iterator(); while(it.hanNext()){ sout(it.next()); } -
增强for循环for each
for(Object obj:set){ //把set的每一个值取出来,赋值给obj对象 sout(obj); }
-
TreeSet
TreeSet是SortedSet接口的实现类。
TreeSet可以确保集合元素处于排序状态。
TreeSet支持两种排序方法:自然排序和定制排序。
继承关系:TreeSet类->NavigableSet接口->SortedSet接口->Set接口->Collection接口
自然排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列
List
ArrayyList
List代表一个元素有序,且可重复的集合,集合中的每个元素都有其对应的顺序索引
List允许使用重复元素,可以通过索引来访问指定位置的几何元素
List默认按元素的添加顺序设计元素的索引
List集合里添加了一些根据索引来操作集合元素的方法
继承关系:ArrayList类->List接口->Collection接口
ArrayList和Vector
都是List接口的经典实现
区别:
- Vector是一个古老的集合,通常建议使用ArrayList
- ArrayList是线程不安全的,而Vector是线程安全的
- 即使为保证List集合线程安全,也不推荐使用Vector
Map
HashMap
相当于函数x和y的关系,key=x是唯一的,value=y是可重复的。
给确定的x就能返回确定的y。
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一种值用于保存Map里的Key,另外一组用于保存Map里的Value
Map里的key和value都可以是任何引用类型的数据
Map中的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较中返回false
key和value之间存在单向一对一关系,即通过制定的key总能找到唯一的,确定是value
HashMap和Hashtable
Map接口的两个经典实现类
区别:
- Hashtable是一个古老的Map实现类,不建议使用
- Hashtable是一个线程安全的Map类,HashMap是线程不安全的
- Hashtable不允许使用null作为key和value,HashMap可以
与HashSet不能保证元素的顺序一样,Hashtable和HashMap也不能保证key-value对的顺序
TreeMap
TreeMap存储key-value对时,需要根据key对键值对进行排序,TreeMap可以保证所有的key-value对处于有序状态
自然排序:TreeMap的所有key必须实现Comparable接口,并且所有的key是同一个类的对象,否则会抛出ClassCastException异常,字典排序
定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序,此时不需要Map的Key实现Comparable接口
Collections
操作集合Set、List、Map的工具类
提供了大量方法对集合元素进行排序,查询,修改等操作。还提供了对集合对象设置不可变,对集合对象实现同步控制等方法。
- reverse(List)反转List中元素的顺序
- shuffle(List)对List集合元素进行随机排序
- sort(List)根据元素的自然顺序对指定List集合元素按升序排序
- sort(List,Comparator)根据指定的Comparator产生的顺序对List集合元素进行排序
- swap(List,int,int)将指定List集合中的i处元素和j处元素进行交换
- max
- min
- frequency
- replaceAll

浙公网安备 33010602011771号