`

java基础——Collections.sort的两种用法

阅读更多
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:

    public static <T extends Comparable<? super T>> void sort(List<T> list) {
        list.sort(null);
    }

    public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }


    首先使用基本类型(此处使用Integer)来演示第一个方法:
    static List<Integer> intList = Arrays.asList(2, 3, 1);
    //正序 
    Collections.sort(intList);
    //倒叙
    Collections.sort(intList,new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 返回值为int类型,大于0表示正序,小于0表示逆序
                return o2-o1;
            }
     });


    接下来看看自定义类的排序:

public class Emp{
    private int empno;
    private String ename;
    public int getEmpno() {
        return empno;
    }
    public void setEmpno(int empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    
    public Emp(int empno, String ename) {
        super();
        this.empno = empno;
        this.ename = ename;
    }
    @Override
    public String toString()
    {
        return "empno:\t"+empno+"\tename:\t"+ename;
    }
}


   
    //定义的list
    static List<Emp> empList;
    static 
    {
        Emp emp1 = new Emp(2,"Guan YunChang");
        Emp emp2 = new Emp(3,"Zhang Fei");
        Emp emp3 = new Emp(1,"Liu Bei");
        empList = Arrays.asList(emp1,emp2,emp3);
    }
    
    //实现排序的方法
    Collections.sort(empList,new Comparator<Emp>() {
            @Override
            public int compare(Emp o1, Emp o2) {
                /*按员工编号正序排序*/
                return o1.getEmpno()-o2.getEmpno();
                /*按员工编号逆序排序*/
                //return o2.getEmpno()-o1.getEmpno();
                /*按员工姓名正序排序*/
                //return o1.getEname().compareTo(o2.getEname());
                /*按员工姓名逆序排序*/
                //return o2.getEname().compareTo(o1.getEname());
            }
     });



    如果直接使用 Collections.sort(empList);需要在Emp类中实现Comparator接口
public class Emp implements Comparable<Emp>{
    private int empno;
    private String ename;
    public int getEmpno() {
        return empno;
    }
    public void setEmpno(int empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    
    public Emp(int empno, String ename) {
        super();
        this.empno = empno;
        this.ename = ename;
    }
    @Override
    public String toString()
    {
        return "empno:\t"+empno+"\tename:\t"+ename;
    }

    @Override
    public int compareTo(Emp emp) {
        /*按员工编号正序排序*/
        //return this.getEmpno()-emp.getEmpno();
        /*按员工编号逆序排序*/
        //return emp.getEmpno()-this.getEmpno();
        /*按员工姓名正序排序*/
        //return this.getEname().compareTo(emp.getEname());
        /*按员工姓名逆序排序*/
        return emp.getEname().compareTo(this.getEname());
    }
   }


使用Collections.sort方法的第一种形式实现:
 Collections.sort(empList);

分享到:
评论

相关推荐

    Java Arrays.sort和Collections.sort排序实现原理解析

    Java中的`Arrays.sort()`和`Collections.sort()`是两个常用的排序函数,它们分别用于对数组和集合进行排序。这两个函数在内部实现上有所不同,但都基于高效的排序算法。 首先,`Collections.sort()`方法在处理列表...

    java sort面试题目

    `Collections.sort()`方法在Java中主要用于对`List`类型的集合进行排序。该方法内部实现采用了TimSort算法,这是一种混合排序算法,结合了归并排序和插入排序的优点。TimSort算法的主要优势在于能够很好地处理几乎...

    按照字母排列——仿照微信联系人

    可以使用Java内置的`Collections.sort()`方法,它接受一个List和一个Comparator作为参数。Comparator是一个接口,用于比较两个对象的顺序。我们可以创建一个自定义的Comparator,比较联系人姓名的首字母: ```java ...

    java排序

    Java标准库提供了一个强大的排序工具——`Arrays.sort()`方法,它使用了Timsort算法,这是一种混合排序算法,结合了插入排序、归并排序和一些其他优化,具有稳定性且在处理实际数据时表现出良好的性能。`Arrays.sort...

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    java-array.zip_源代码;array

    在Java编程语言中,数组和集合是两种基本的数据结构,它们在存储和处理数据时扮演着重要角色。这个"java-array.zip"压缩包文件包含了关于数组和集合处理的源代码实例,供开发者学习和参考。这里我们将深入探讨这两个...

    java基础之集合面试题共4页.pdf.zip

    1. **集合接口**:Java集合框架主要由两种接口构成——List(列表)和Set(集)。List接口允许元素有顺序,并且可以包含重复元素,如ArrayList和LinkedList。Set接口不允许重复元素,如HashSet和TreeSet。 2. **Map...

    语言程序设计资料:Java开发必备自测练习题.doc

    20. **排序操作**:Java的`Arrays.sort()`方法可用于数组排序,`Collections.sort()`方法用于列表排序。自定义排序规则可以通过实现`Comparator`接口。 这些练习题覆盖了Java基础语法、面向对象编程、文件操作、...

    浅谈java Collection中的排序问题

    List接口提供了直接排序的方法——`Collections.sort()`. 这个方法可以对任何实现了List接口的对象进行排序。如果列表中的元素是原始类型(如int、char等),我们可以直接使用`Collections.sort()`。但是,如果列表...

    java8新特性总结自用

    方法引用是一种更加简洁的方式来表示 Lambda 表达式,当 Lambda 体仅包含一个方法调用时,可以使用方法引用来代替 Lambda 表达式。 **示例**: ```java List&lt;String&gt; names = Arrays.asList("peter", "anna", "mike...

    alg.rar_alg.rar_java算法

    描述中提到的"Java算法库——查找和排序",揭示了这个库的重点在于提供查找和排序这两种基础但至关重要的算法。查找算法帮助我们在数据集中快速定位特定元素,如二分查找、哈希查找等;排序算法则用于组织数据,例如...

    List中保存对象,按对象中某一属性排序【含程序源码】

    这段代码使用了Java 8的Comparator.comparing()方法,它接受一个函数式接口——方法引用(User::getAge),直接根据User对象的getAge()方法返回值进行排序。 通过以上示例,你应该了解了如何在Java中使用List保存对象...

    第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答.pdf

    以上两种方法均可有效地解决题目要求的问题。暴力枚举方法较为直观且易于理解,但对于大规模问题可能存在效率问题;DFS全排列枚举方法则能够更高效地遍历所有可能的情况,尤其是在数字较少的情况下更为适用。

    KNN最近邻算法java实现

    KNN,全称为K-Nearest Neighbors,中文名为K最近邻算法,是一种基础且重要的机器学习算法。它属于监督学习中的非参数方法,适用于分类和回归问题。KNN的基本思想是:对于一个新的未知样本,我们将其归类到与其最近的...

    排序算法c&java描述

    本资源包包含了两种编程语言——C和Java对于排序算法的详细描述,旨在帮助应聘者更好地理解和掌握这些算法,以应对软件公司的笔试挑战。 首先,让我们探讨排序算法的基本概念。排序是将一组无序的数据元素按照特定...

    Java8新特性之方法引用&Stream流应用实例md,学习代码

    例如,如果你有一个`List&lt;String&gt;`并希望使用`Collections.sort()`方法,可以写成`list::sort`。 3. 构造器引用:在创建新对象时,可以使用`ClassName::new`来引用构造器。这在函数式编程接口如`Function`或`...

    Java例题第四章_java编程_please1ss_

    在这个例子中,会学习到如何创建对象数组,并对其中的对象进行排序(可能使用`Collections.sort()`或自定义比较器)和查找特定对象(可能使用二分查找或其他搜索算法)。这涉及到数据结构和算法的知识,对于理解...

    实现ListView的A-Z字母排序

    在getViewTypeCount()方法中返回2,表示两种类型的视图——数据项和分组标题。在getItemViewType(int position)方法中判断当前位置是数据项还是分组标题,然后在getView()方法中根据类型创建相应的视图。 5. 添加...

    java贪吃蛇

    在本项目中,我们主要探讨的是使用Java编程语言实现的经典游戏——“贪吃蛇”。Java是一种广泛应用于开发桌面应用、Web应用以及移动应用的强大编程语言,它的面向对象特性使得开发游戏变得更为直观和灵活。 ...

    java各种经典算法大全 还包括C语言的实现

    这两种查找方法在Java和C中都可以通过递归或循环实现。 3. **图算法**:Dijkstra算法、Floyd-Warshall算法和Kruskal算法,用于解决最短路径问题。它们在网络路由、交通规划等领域有广泛应用。Java的`PriorityQueue`...

Global site tag (gtag.js) - Google Analytics