2019-08-17 Day16泛型,Set,键值对,异常处理

目的

了解泛型在Java开发中的应用,掌握Set接口和三个子类的实现,学习Map集合 key-value映射的方法使用

泛型

什么是泛型?泛型的本质是参数化类型,也就是说,泛型就是将所操作的数据类型作为参数的一种语法。泛型有很多种体现,我们可以定义泛型类,泛型方法,泛型数组等,我们只进行简单的了解
如定义一个泛型类

class GenericTest<T>{
    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));
    }
}

整体使用

public class MyClass {
    public static  void main(String[] args ){

        GenericTest<String>g1 = new GenericTest<String>();
        g1.test("jack","Merry");
}

Set

Set是一个不包含重复元素的集合,无序且唯一,Set接口有三个实现子类Hashset,LinkedHashSet,TreeSet。

HashSet

HashSet由哈希表支持,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。可以根据hashcode和equals来判断是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。

HashSet的一个使用示例

HashSet<String> names = new HashSet<>();
        names.add("jack");
        names.add("Merry");
        names.add("abc");
        names.removeIf(ele -> {
            return ele.compareTo("c")>0;
        });

TreeSet

TreeSet也不能存放重复对象,但是TreeSet会自动排序,使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序(TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。),具体取决于使用的构造方法.

TreeSet的一个使用示例

TreeSet<Person> score = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person person, Person t1) {
                return person.compareTo(t1);
            }
        });
       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);
class Person implements Comparable{
    String name;
    int age;

    public Person(String name, int age){
        this.age = age;
        this.name = name;

    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    public int compareTo(Object o) {
        //1.判断o对象是不是Person的一个对象6
        if(o instanceof Person){
            //自己规定比较的策略
            Person o1 = (Person) o;
            if(this.age != ((Person) o).age){
                return this.age - o1.age;
            }else{
                //年龄相同的情况下 再比姓名和字母
                return this.name.compareTo(o1.name);
            }
        }else{


            return -1;
        }

    }
}

Map key-value映射(键值对)

Map集合没有继承Collection接口,但是其提供了key到value的映射(Map储存的是一对键值(key和value))。每一个key不能有相同,每个key只能映射一个value值。
注意点:
1.Map支持泛型,形式如:Map<K,V>
2.Map中使用put(K key,V value)方法添加

Map中的方法使用

1.添加对象:键值对

 score.put("Chinese",89);
        score.put("Math",96);
        score.put("English",99);

2.因为每个key只能有一个,也可利用此特性进行value值的改换,如在上面代码的基础上再添加一行

score.put("Chinese",90);

所对应的value值改成了90

3.获取键值对的个数

score.size();

4.获取所有的key

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

5.获取所有的value

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

6.获取Entry;键值对

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

7.遍历,一共有两种遍历方法
通过遍历key来得到每一个key对应的值

for(String key: score.keySet()){
            int s = score.get(key);
            System.out.println("key:"+key+" value:"+s);
        }
        System.out.println(score);

通过EntrySet 得到Entry对象的集合
一个Entry管理一个键值对 getKey getValue

 Set<Map.Entry<String,Integer>> entrys = score.entrySet();
        for(Map.Entry entry:entrys){
            String key = (String)entry.getKey();

            //获取entry对应的值
            Integer value = (Integer)entry.getValue();

        }

异常处理(Exception)

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。Java中提供一套处理机制的方法,我们称之为异常处理机制,它能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。异常处理有两种常用的方法

1.try{
}catch(异常类型,接收异常的对象){
}

在try的大括号中,填写执行的代码,这些代码可能出现异常,一旦出现异常 系统自动为我们创建一个异常类,并抛出,catch用来捕获异常,如果有多个异常,可有多个catch,来捕获异常,catch的顺序是从小到大
如果异常出现 后面的代码将不会被执行,所以 try代码块不要抓太多代码

代码示例

public class Exception1 {
    public static void main(String[] args) {
        int a = 0;
        int b = 20;
        FileReader fr = null;
        try{
            int c = b / 1;
            System.out.println("hello");//不打印

            FileReader fr2 =new FileReader("");
        }catch (ArithmeticException e){
            System.out.println(e.getMessage());
        }

2.使用throws抛出异常 给外部处理,如果有多个异常 用逗号隔开

public static void main(String[] args) throws IOException {
...
}

多个异常时

public static void test() throws FileNotFoundException,NullPointerException{
....
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 不知多幸运,一年中,我竟寻到了两处净土――一处是书吧,另一处,便是公园。 公园里有许多大大小小不同的湖,...
    希GX阅读 409评论 1 1
  • 科技飞速发展的今天,你是否想象过,在未来的十几年里,职场办公室会发生什么样翻天覆地的变化。很久提出来的“在家办公”...
    职也阅读 399评论 0 0
  • 知识回顾 1.字符串(str)通过双引号或者单引号引起来的内容就是字符串 2.Unicode编码 3.转义字符 转...
    莫名ypc阅读 463评论 0 0

友情链接更多精彩内容