JAVA泛型、Set集合、HashMap、异常处理

(一)泛型

  • 定义泛型:能够使多种数据类型实现功能,避免转换
  • 泛型分类:
    1.泛型类
    2.泛型方法
  1. 泛型数组
  • 具体应用:
    1.定义一个泛型类和泛型方法:
class GenericTest{
    int age;
    T a1;
    T a2;
    //泛型方法
    public void test(T a1,T a2){
        this.a1 = a1;
        this.a2 = a2;
        System.out.println(a1.equals(a2));
    }
}

(二)Set集合

  • 特点:
    1.集合里面对象不能重复 如果重复添加不进去内部使用HashMap来实现 键值对 键key不能重复 如何实现?每添加一个对象计算这个对象的hash值(整数)如果对象相同hash值也相同
    2.集合是无序的 添加的顺序和存储的顺序无关 使用了默认排序
HashSet names = new HashSet<>();
        names.add("jack" );
        //names.add("jack" );   --->就不会被添加进去
        names.add("merry" );
        names.add("abc" );
        System.out.println(names);

效果图.png

可见重复的元素并未添加进去,并且会根据默认的排序方式进行排序

(三)可以排序的集合 Treeset

方法:treeset
方式一:采用匿名类

 TreeSet score = new TreeSet<>(new Comparator() {
         @Override
          public int compare(Person person, Person t1) {
              return person.compareTo(t1);
            }
        });

方式二:采用Lambda表达式

TreeSet score = new TreeSet<>((Person p1,Person p2)->p1.compareTo(p2));
        Person p1 = new Person("jack",20);
        Person p2 = new Person("jack",30);
       Person p3 = new Person("rose",20);
       score.add(p1);
       score.add(p2);
       score.add(p3);
       System.out.println(score);

(四)HashMap

  • 存储数据的特点:键key-值value对
  • key不能重复 可以是任意对象类型 通常使用字符串String
    1.添加对象:
 HashMap score =new HashMap<>();
        score.put("Chinese",89);
        score.put("Math",94);
        score.put("English",92);

如果键相同,代表更改对应的值

        score.put("Chinese",91);
        System.out.println(score);

key:Chinese的值改变了


效果图.png

2.获取键值对的个数

        score.size();

3.获取所有的key

        System.out.println(score.keySet());

4.获取所有的值(value)

        System.out.println(score.values());

5.获取Entry键值对

        System.out.println(score.entrySet());

6.获取一个键对应的值

        System.out.println(score.get("English"));

7.键值对的遍历

  • 方式一:通过遍历key来得到每一个key对应的值
        for(String key:score.keySet()){
            //通过key得到值
            int s =score.get(key);
            System.out.println("key"+key+"value"+s);
        }
  • 获取到每一个键值对


    效果图.png
  • 方式二:通过Entryset 得到Entry对象的集合
    一个Entry管理一个键值对 getKey getValue
       Set> entrys =score.entrySet();
        for (Map.Entry entry:entrys){
            //的到Entry对应的key
            String key =(String) entry.getKey();
            //获取entry对应的值
            Integer value = (Integer) entry.getValue();
        }

(五)异常处理

  • 作用:处理运行过程中出现的不可控的错误 使程序更健壮
  • 异常处理方式一:try------catch----finally
try{
             执行代码  可能会出现异常
             一旦出现异常  系统自动为我们创建一个异常类 并抛出
          }catch (ArithmeticException e){
            如果需要自己处理异常就catch
          } catch (FileNotFoundException e) {
             如果有多个异常可以使用多个catch来捕获
             如果有多个异常 catch的顺序是从小到大
      }finally{
            不管有没有异常finally都会被执行
            资源回收  比如:网络链接  数据库链接 I\O流
}

需要注意的是:如果异常出现后面的代码将不执行所以try代码块不要抓太多代码
异常处理方式二:使用throws抛出异常

class TException {
   public static void test() throws FileNotFoundException{
        FileReader fr = new FileReader("");
    }
}
  • 异常处理方式三:当特殊情况出现 自己可以选择使用throw抛出异常
 public static void test3()throws PXDException{
       throw new PXDException("自己的异常类:无所作为");
    }
效果图.png
  • 异常处理方式四:自定义异常
    1.需要创建一个继承Exception的类
    2.提供一个无参构造方法
    3.提供一个有参构造方法 参数是一个字符串
class PXDException extends Exception{
    //提供一个无参构造方法
    public PXDException(){}
    //提供一个有参构造方法  参数是一个字符串
    public PXDException(String desc){
        super(desc);
    }
}

(六)今日小结:

每天所学很零碎,但是通过这样系统的整理之后,就感觉有了许多头绪,也舒服多了。可是在具体运用上肯定还不行,缺乏练习,再过一段实际完完全全进入实战,心里还是很担心的,感觉记不住啊,真的太多东西了,不过还是要坚持下去,总会出效果的。

你可能感兴趣的:(JAVA泛型、Set集合、HashMap、异常处理)