java基础关于java排序(一)

来源:互联网 发布:汇编和c语言先学哪个 编辑:程序博客网 时间:2024/06/05 16:49

其实我还是一个java小白,我自己这样认为,因为说来惭愧,到现在我已经在公司里面实习了有半年了,但是呢我真正连java JDK都还没有完全认真的看一遍.

现在我就在自己的约束下重新学习java,走上这个伟大航路.今天健身肩有点损伤,以后可要注意一点,

关于java中的自己在项目中遇到的两个问题: 就是根据抓取的数据根据业务需求要进行排序,这就来了问题,怎么进行排序呢,到地是int类型的还是String的类型呢,还是自定义的类型呢,没关系这些在java中都可以用这种方法解决:继承 Compareable接口或者继承Compartor接口实现.

好了废话不多上代码,代码一看在自己练习一下就懂了:

要进行排序的Sort类:

public class Sort implements Serializable, Comparable<Sort> {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public int compareTo(Sort o) {        return this.getName().compareTo(o.getName());    }}

这个是继承自Comparatable接口,看仔细要在自定义的类里面实现一个compareTo()方法.

接下来就是测试类:

public class SortTest {    public static void main(String[] args) {        Sort sort = new Sort();        sort.setName("abc");        Sort sort1 = new Sort();        sort1.setName("def");        Sort sort2 = new Sort();        sort2.setName("fig");        List<Sort> list = Lists.newArrayList();        list.add(sort);        list.add(sort1);        list.add(sort2);        list.add(sort2);        list.add(sort1);        for (Sort sort3 : list) {            System.out.println(sort3.getName());        }        System.out.println("===================");        Collections.sort(list);        for (Sort sort3 : list) {            System.out.println(sort3.getName());        }    }}

下面我们来看一下输出的结果:

abcdeffigfigdef===================abcdefdeffigfig

其实可以很清楚的看出来了排序已经OK了,因为这一句Collections.sort();

下面我们来看一下继承子Comparator接口:

Sort类

public class Sort {    private int age;    private String name;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

看清楚哦,这个自定义的类里面没有实习那任何额外的方法哦;问题来了我们怎么对他进行排序呢,因为我们没有采用任何措施.带着这个问题我们找到了方法:那就是Collections.sort()方法,他是一个重载方法,啊啊啊啊...知道了吧,,哈哈去看一下源码吧,你什么都知道了.好了思路有了我们在往下走:

SortCompara类:这是面自定义排序策略:

public class SortCompare implements Comparator<Sort> {    @Override    public int compare(Sort sort1, Sort sort2) {        int i = sort1.getName().compareTo(sort2.getName());        /**         * 首先比较名字,名字相等则比较年龄结果         */        if(0 == 1){            return sort1.getAge() - sort2.getAge();        }        return i;    }}

下面我们来看一下测试类:

public class SortTest {    public static void main(String[] args) {        Sort sort1 = new Sort();        sort1.setAge(1);        sort1.setName("def");        Sort sort2 = new Sort();        sort2.setAge(2);        sort2.setName("def");        Sort sort3 = new Sort();        sort3.setAge(1);        sort3.setName("abc");        List<Sort> list = Lists.newArrayList();        list.add(sort1);        list.add(sort2);        list.add(sort3);        for (Sort sort : list) {            System.out.println(sort.getName() + " : " + sort.getAge());        }        System.out.println("========================");        Collections.sort(list, new SortCompare());        for (Sort sort : list) {            System.out.println(sort.getName() + " : " + sort.getAge());        }    }}

OK看结果吧:

def : 1def : 2abc : 1========================abc : 1def : 1def : 2


到这里我想大家也都明白了把,这个就是我在业务线上遇到的一个问题,java的排序策略.两种方式都有其自己的特点.具体的使用哪一种就看自己的业务场景和个人爱好啦;

比如你想你的自定义类型不变,不干扰那么你就使用第二种方法即就是继承Comparator接口.这样还可以跟更方便的自定义排序策略,而且很容易理解.但是呢要是你的自定义类是一个不变的类,而且你也不需要别人了解他的排序策略,而且很方便很简单避免重复.这样你就可以使用第一种方式,这个就看自己的需求啦.



0 0
原创粉丝点击