栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java常用的排序方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java常用的排序方法

java常用的排序方法 一、数组排序 1.1数组从小到大排序

可以使用java.util包下Arrays类里的静态方法sort

代码示例:

public class ArraysSort {
    public static void main(String[] args) {
        Integer[] a = {9, 8, 5, 13, 76, 34};
        Arrays.sort(a);
        for (Integer i : a) {
            System.out.println(i);
        }
    }
}
1.2数据从大到小排序

Arrays.sort()有很多重载方法,通过看源码或api文档可知,其中有一个sort方法传入的2参数分别是一个数组和一个Comparator泛型接口,这个接口就是实现逆序排序的关键了。由于参数都是实例的,而接口是不能直接实例的,所以我们可以写一个实现这个接口的类,然后重写比较大小的规则即可。

public class ArraysSort {
    public static void main(String[] args) {
        Integer[] a = {9, 8, 5, 13, 76, 34};
        Arrays.sort(a, new MyComparator());
        for (Integer i : a) {
            System.out.println(i);
        }
    }
}

class MyComparator implements Comparator{
    @Override
    public int compare(Integer o1, Integer o2) {
      // 从大到小是o2 - o1,从小到大是o1 - o2
      // 返回值是负数,会把数字往左移,等于0不变,正数右移
        return o2 - o1;
    }
}
1.3指定数组局部位置排序
public class ArraysSort {
    public static void main(String[] args) {
        Integer[] a = {9, 8, 5, 13, 76, 34};
        // 0是开始位置,2是结束位置+1(所以索引的范围是前闭后开)
        Arrays.sort(a, 0, 2);
        for (Integer i : a) {
            System.out.println(i);
        }
    }
}
二、List对象排序 2.1List从小到大排序

可以使用java.util包下Collections类里的静态方法sort

public class ListSort {
    public static void main(String[] args) {
        List list1 = new ArrayList<>();
        list1.add(9);
        list1.add(4);
        list1.add(2 );
        list1.add(13);
        Collections.sort(list1);
        System.out.println(list1);
    }
}
2.2List从大到小排序

方法1:实现Comparator接口

public class ListSort {
    public static void main(String[] args) {
        List list1 = new ArrayList<>();
        list1.add(9);
        list1.add(4);
        list1.add(2 );
        list1.add(13);
        Collections.sort(list1, new MyComparator());
        System.out.println(list1);
    }
}

class MyComparator implements Comparator{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
}

方法2:

使用Collections.reverse()方法可以反转List

先从小到大排序,然后反转List

public class ListSort {
    public static void main(String[] args) {
        List list1 = new ArrayList<>();
        list1.add(9);
        list1.add(4);
        list1.add(2 );
        list1.add(13);
        Collections.sort(list1);
        Collections.reverse(list1);
        System.out.println(list1);
    }
}
2.3给List里的自定义对象排序

自定义对象需要实现Comparable接口并重写compareTo方法,Integer类也实现了Comparable接口,所以参考源码改改参数即可实现。学会这个技术对特殊的数据结构进行排序就非常方便了,比如对一个链表进行排序。

class Student implements Comparable {
  	// 定义了一个简单的pojo类,然后定义构造函数,get,set,toString方法,并重写compareTo方法
    private Integer id;
    private String name;

    public Student(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + ''' +
                '}';
    }

    @Override
    public int compareTo(Student o) {
      	// 这里两个数比较也有三种情况,和上述的Comparator接口的方法差不多
        return (this.id < o.id) ? -1 : ((this.id == o.id) ? 0 : 1);
    }
}
public class ListSort {
    public static void main(String[] args) {
        List list1 = new ArrayList<>();
        list1.add(new Student(89, "李四"));
        list1.add(new Student(45, "张三"));
        list1.add(new Student(101, "王五"));
        Collections.sort(list1);
        System.out.println(list1);
    }
}
2.4打乱List里的数据顺序(随机)

可以使用 Collections.shuffle方法,随机这个场景也是比较多的,比如扑克牌的发牌。就可以不用自己造轮子了。

public class ListSort {
    public static void main(String[] args) {
        List list1 = new ArrayList<>();
        list1.add(new Student(89, "李四"));
        list1.add(new Student(45, "张三"));
        list1.add(new Student(101, "王五"));
        Collections.shuffle(list1);
        System.out.println(list1);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号