美文网首页
再谈数组,自定义排序,接口默认方法,函数式接口注解,初次接触泛型

再谈数组,自定义排序,接口默认方法,函数式接口注解,初次接触泛型

作者: 在路上phper | 来源:发表于2018-01-22 16:45 被阅读21次

    数组排序
    Arrays是老外帮我们封装好的类库 里面的方法为静态方法 不需要实例化 它的出现是因为普通数组功能过于单一 其存在java.util类库下
    在MyIndex里面写入以下代码


    image.png

    运行项目


    image.png
    从结果可以看出这种排序是按照首字母进行的排序 同理如果是int类型的也可按照数字大小排序
    自定义排序
    接下来我们创建一个Core包,里面创建一个MyCompare类
    目录如下
    image.png

    在我们输入Arrays.sort("users")过程中编译器会给我们提示该函数第二个参数如下


    image.png
    接下来我们在新建的MyCompare中写入代码
    可以发现
    image.png
    带有T的标识为泛型 稍后我们会学习到
    我们需要在MyCompare里面继承接口Comparator
    代码如下
    image.png
    这时我们鼠标放在implements上 alt+enter
    弹出如下
    image.png
    告诉我们要继承接口
    点击implements后出现
    image.png

    编辑器提示我们必须要实现的是第一个compare方法
    点击出现如下代码


    image.png
    接下来在MyCompare中实现compare方法
    代码如下
    image.png
    接着我们按照自定义排序 想按照字母长度进行排序
    在MyIndex里面sort函数第二个参数传入实例化的MyCompare类
    代码如下
    image.png
    运行结果
    image.png
    可以看出我们是按照字母由小到大的排序
    如果将代码改为下面则由大到小排序
    image.png
    运行结果
    image.png
    我们还可以简化一下代码
    image.png
    还可以继续优化代码
    在MyIndex文件中 sort方法传入实例化的类时 idea会提示我们传入的最好是一个字符串
    这就需要用到泛型
    在继承Comparator时后面出现一个T 这里可以指定为String类型 代码如下
    image.png
    运行结果
    image.png
    此时MyIndex处的波浪线也消失了
    image.png
    接下来我们解决一下上面留下的疑惑?
    为什么继承接口出现多个抽象方法 只需要实现compare一个就可以呢?
    来到MyCompare类 ctrl+鼠标放到Comparator上

    会进去它具体实现的文件 可以看见下面一些内容


    image.png
    自动java1.8开始 支持default方式 带有default的关键字的方法可以有方法体 因此不需要在继承的接口中具体实现。它是一个默认函数
    带有default的函数不需要实现了,那为什么 boolean equals(Object obj); 这个函数也没实现呢。
    接下来我们了解一下java中的注解
    在Comparator.java中可以看见下面这段
    image.png
    @FunctionalInterface这个东西为java中的注解 简单理解成标注的意思 注解是可以自己定义的 也可以通过编程的方式来完成 也可通过反射的方式来完成注解的功能
    @FunctionalInterface为函数式接口
    标注为@FunctionalInterface之后,该接口变为函数式接口
    (1)有且只有一个抽象方法
    (2)default方法不属于抽象方法
    (3)如果方法重写了Object中的方法,也不属于抽象方法
    也就是说Comparator.java中只能有一个抽象方法
    即为
    image.png
    只不过将abstract省略了而已
    函数式接口注解中的英文注释
    image.png
    说明了default方法不是抽象方法 并且如果一个方法属于Object的一个重写(overriding)也不属于抽象方法
    接下来在MyIndex里面随便写入以下代码
    image.png
    鼠标放入Object进入代码 可以发现里面有如下代码Comparator.java中也有这个函数 所以不是抽象方法
    image.png

    相关文章

      网友评论

          本文标题:再谈数组,自定义排序,接口默认方法,函数式接口注解,初次接触泛型

          本文链接:https://www.haomeiwen.com/subject/lyglaxtx.html