Java异常、集合

Java异常

异常:程序执行中发生的不正常情况称为异常

用于处理非预期的情况,比如文件没找到,网络错误,非法的参数

程序运行过程中发生的异常可分为两类

  1. Error:JVM系统内部错误、资源耗尽等严重情况

  2. Exception:其他因编程错误或偶然的外在因素导致的一般性问题

    如:空指针访问

    试图读取不存在的文件

    网络连接中断

异常层次

异常处理

捕获异常和抛出异常

try、catch、finally的执行顺序

  • finally中的代码总会被执行,并且finally语句执行在return语句执行之后,返回之前。

  • 如果finally语句中对返回数据变量做了改变,不会影响最终的返回结果,对引用变量做了改变,会影响最终的返回结果。

    (finally是在return后面的表达式运算后执行的,此时并没有返回运算后的值,而是把要返回的值保存起来,不管finally中的代码怎样,返回的值都不会改变,仍然是之前保存的值)所以函数返回值是在finally执行前确定的。

  • finally中有return的话,会在try和catch的return返回前返回。

Java集合

java集合类存放于java.util包中,是一个用来存放对象的容器

  1. 集合只能存放对象。如果存一个int型数据1放入集合中,会被自动转换成Integer类后存入。
  2. 集合存放的是多个对象的引用,对象本身还是放在堆内存中。
  3. 集合可以存放不同类型,不限数量的数据类型。

集合可以分为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接口的经典实现

区别:

  1. Vector是一个古老的集合,通常建议使用ArrayList
  2. ArrayList是线程不安全的,而Vector是线程安全的
  3. 即使为保证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接口的两个经典实现类

区别:

  1. Hashtable是一个古老的Map实现类,不建议使用
  2. Hashtable是一个线程安全的Map类,HashMap是线程不安全的
  3. 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
posted @ 2021-07-03 22:00  灰线  阅读(68)  评论(0)    收藏  举报