Comparable 的 使用

2019-10-14 21:18:57

参考地址 Comparable 的 使用

在聊 Comparable 和 Comparator 之前,我觉得我们可以先聊聊Int数组的排序! 现在呢,下面有一个非常简单的数组


如:int[] array = {3,8,5,3,12,10};  要求呢就是对这个int数组进行一个从大到小或者从小到大的排序。我相信你们等下就会和我说 冒泡啊等的算法!但我们今天不聊这些算法。来点简单的!


在java 里面有个Arrays 的类(java.util.Arrays),他里面有一个sort的方法(public static void sort(int[] a)),这个方法就可以直接对这个数组进行排序! 而且这个方法还是由static修饰的,意思就是和你说,你别实例化哈,直接拿来用!


int[] array = {3,8,5,3,12,10};

Arrays.sort(array);

for(int index = 0;index < array.length;index++){

       System.out.print(array[index]+",");

}

结果

3,3,5,8,10,12,

 

写到这里,大家看到这个sort排序完是从小到大的一个顺序排的,那怎么从大到小呢? for循环反着输出不就好了么!


int[] array = {3,8,5,3,12,10};

Arrays.sort(array);

for(int index = array.length-1;index >=0;index--){

System.out.print(array[index]+",");

}

结果

12,10,8,5,3,3,

那么ok是吧,讲这个的目的呢是为了引出我下一个需求。现在我们对int数组的排序应该已经掌握了!是不是真的很简单是吧!


听明白的给我扣个6!!!


来进入正题哈! 现在我有一个需求,我手上呢有一个UserBean类,bean里面的字段有(id,username,age)三个字段。 如果你userBean不会写的,可以关电脑了哈。如下:


public class UserBean {

private String id;

private String username;

private Integer age;

        // set and get

}

 那现在我要做的呢就是,我要对这个UserBean数组进行一个按 年龄 大小排序的功能。什么意思呢!就是age越大的人,最先输出。


要做这个呢,我们也是用到了Arrays.sort 这个排序的方法!但不同的是,我们之前用的是int数组,现在我们用的是这个UserBean数组。如果你想对这个UserBean数组进行排序,你要多做一件事,就是让这个 UserBean类去 实现Comparable 的接口,并重写 里面  comparaTo 的方法。注意,这个接口是可以提供泛型的


public class UserBean implements Comparable<UserBean> {

        private String id;

        private String username;

        private String age;

        // 省略了  set and get 

        public int compareTo(UserBean o) {

            // TODO Auto-generated method stub

            return 0;

        }

}

compareTo 方法的返回值为三个,分别是[-1 ,0 ,1 ]具体重写的代码如下


public class UserBean implements Comparable<UserBean> {

        private String id;

        private String username;

        private String age;

        // 省略了  set and get 

        public int compareTo(UserBean o) {

               if(this.age > o.getAge()){

                    return 1;

               }else if(this.age < o.getAge()){

                     return -1

             }else{

                return 0;

             }

      }

}  

写完这个UserBean后,我们就可以去调用 Arrays.sort 这个方法了


UserBean[] array = UserBean[3];

array[0] = new UserBean("1","zhangsan","11");

array[1] = new UserBean("2","lisi","12");

array[2] = new UserBean("3","wangwu","13");

Arrays.sort(array);


  • 2018-11-22 21:14:34

    为什么要采用WebView独立进程

    App中大量Web页面的使用容易导致App内存占用巨大,存在内存泄露,崩溃率高等问题,WebView独立进程的使用是解决Android WebView相关问题的一个合理的方案。

  • 2018-11-22 21:15:45

    Android WebView: 性能优化不得不说的事

    Mo说:大家通过前两篇文章想必都能顺利的 get 到 WebView 与 JavaScript 交互的技能了。现在 App 嵌入 H5 页面已经是稀松平常的事情了,开发者要面对 WebView 也越来越多的爆发出来,比如页面加载慢,内存泄露,不同 Android 系统版本采用了不同内核的兼容问题等等。 所以当我们使用了 WebView 这个组件的时候,性能优化的事情就不能不提上议程了。这篇文章我们就针对上述问题来总结下 Android WebView 性能优化的常见方法。 作者:MoTalksCn_林墨 链接:https://www.jianshu.com/p/95d4d73be3d1 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 2018-11-22 21:20:04

    WebView内存泄漏--解决方法小结

    Android混合开发时经常用到WebView加载html等页面,而WebView的内存泄漏就是最经常遇到的问题,尤其是当项目中需要用webview加载的页面比较多时。 即使当我退出页面时在我的BrowserActivity的onDestroy()方法中进行内存占用回收(如下图)但并没有效果:

  • 2018-11-23 09:19:27

    论索引的重要性

    我还有什么能说的呢,看来索引基本能解决一切慢sql。好开心。

  • 2018-11-26 17:03:59

    有些 where 条件会导致索引无效

    在查询中,WHERE 条件也是一个比较重要的因素,尽量少并且是合理的 where 条件是徆重要的,尽量在多个条件的时候,把会提取尽量少数据量的条件放在前 面,减少后一个 where 条件的查询时间。

  • 2018-11-26 17:05:47

    sql查询调优之where条件排序字段以及limit使用索引的奥秘

    看起来匪夷所思,其实搞清楚mysql查询的原理之后,其实很简单 我们来看这2条sql查询,都用到了where order by limit 当有limit存在时,查询的顺序就有可能发生变化,这时并不是从数据库中先通过where过滤再排序再limit 因为如果这样的话,从500万数据中通过where过滤就不会是5s了。

  • 2018-11-26 21:46:28

    TextView设置行间距、行高,以及字间距

    Android系统中TextView有默认行间距,但是比较窄有的时候需要我们设置每行行间距。 TextView为我们提供了相关设置属性android:lineSpacingExtra或android:lineSpacingMultiplier。