主要讲述对list进行排序的几种方式

1、先来个简单的,上代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
  List<Integer> list = new ArrayList<Integer>();
  list.add(new Integer(5));
  list.add(new Integer(13));
  list.add(new Integer(4));
  list.add(new Integer(9));
  Collections.sort(list);
  System.out.println(list.toString());
  }
}

程序运行结果:

[4, 5, 9, 13],这种简单的排序直接按照自然顺序进行升序排列。

2、list参数类型相对复杂的排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
  public static void main(String[] args) {
  List<User> list = new ArrayList<User>();
  list.add(new User("张三", 5));
  list.add(new User("李四", 30));
  list.add(new User("王五", 19));
  list.add(new User("陈十七", 17)); // 陈十七永远十七岁
  Collections.sort(list); // 按年龄排序
  System.out.println(list.toString());
  }
} class User implements Comparable<User>{   private String name; //姓名   private int age; // 年龄   public User(String name, int age) {
    this.name = name;
    this.age = age;
  }   // getter && setter
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
  this.age = age;
  }   @Override
  public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
  }   @Override
  public int compareTo(User user) { //重写Comparable接口的compareTo方法,
    return this.age - user.getAge();  // 根据年龄升序排列,降序修改相减顺序即可
  }
}

程序运行结果:根据年龄升序排列

[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]

3、匿名内部类实现排序

public class sort {
  public static void main(String[] args) {
  List<User> list = new ArrayList<User>();
  list.add(new User("张三", 5));
  list.add(new User("李四", 30));
  list.add(new User("王五", 19));
  list.add(new User("陈十七", 17)); // 陈十七永远十七岁
  Collections.sort(list, new Comparator<User>() {
    @Override
    public int compare(User u1, User u2) {
      int diff = u1.getAge() - u2.getAge();
      if (diff > 0) {
        return 1;
      }else if (diff < 0) {
        return -1;
      }
      return 0; //相等为0
    }
  }); // 按年龄排序
  System.out.println(list.toString());
  }
}

 运行结果:[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]

总结:以上就是list排序经常用的几种方法,前两种方法都是通过实体实现Comparable接口并重写compareTo方法,第一种方式之所以没实现接口并实现compareTo方法,通过查看Interger类源码可以看到,java已经帮我们实现好了,所以不用再次写

最后一种方法通过匿名内部类实现Comparator接口实现compare方法,通过自定义比较器来实现排序。

原文地址:https://www.cnblogs.com/raysource/p/9199089.html

java对list进行排序的更多相关文章

  1. Java内存访问重排序笔记

    >>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ...

  2. Java线性表的排序

    Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...

  3. java数组降序排序之冒泡排序

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  4. java中的选择排序之降序排列

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  5. Java 多条件复杂排序小结

    前言 今天下午做了拼多多在牛客网上的在线笔试题,感觉自己的智商被鄙视到了···不过其中一道题的某一部分引起了我极大的兴趣,感觉可以总结一下,做好积累~ 题目的部分我拍照如下所示 这里面最复杂的就是第3 ...

  6. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  7. Java实现各种内部排序算法

    数据结构中常见的内部排序算法: 插入排序:直接插入排序.折半插入排序.希尔排序 交换排序:冒泡排序.快速排序 选择排序:简单选择排序.堆排序 归并排序.基数排序.计数排序 直接插入排序: 思想:每次将 ...

  8. Java ArrayList的不同排序方法

    本文由 ImportNew - 温布利往事 翻译自 dzone.欢迎加入翻译小组.转载请见文末要求. 由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.Arra ...

  9. Java 的八种排序算法

    Java 的八种排序算法 这个世界,需要遗忘的太多. 背景:工作三年,算法一问三不知. 一.八种排序算法 直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序和基数排序. 二.算 ...

  10. java中Collections.sort排序详解

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

随机推荐

  1. linux网络编程之system v信号量(二)

    今天迎来元旦假期的最后一天了,过得好快~昨天跟小伙伴们在军都滑雪陪儿爽,虽说上了两回中级道都摔得异常的惨烈,但是在初级道上学习"s"转弯还是有一些小心得,可以在要往高手迈进的前提, ...

  2. 在idea中如何将一个项目打成war包

    s会用clean+package两个组合命令.来进行打包,我的war直接打在了target下面.然后,随时可以找到.war文件

  3. certbot更新错误

    自动更新老是提示这个错误. root@vultr:~/certbot# ./certbot-auto Upgrading certbot-auto 0.29.1 to 0.34.2... Couldn ...

  4. scoket --- 练习

    三次握手,四次挥手(面试会问) 三次握手建连 [] 最开始的时候客户端和服务器都是处于CLOSED状态.主动打开连接的为客户端,被动打开连接的是服务器. TCP服务器进程先创建传输控制块TCB,时刻准 ...

  5. Z+F激光扫描仪

    链接:https://zhuanlan.zhihu.com/p/48589754 三维扫描仪有三个误差来源: ● 线性误差(激光雷达部分/LARA) ● 测距噪声(激光雷达部分/LARA) ● 测角误 ...

  6. python - django (auth 的使用)

    # """ 1. 创建用户: python manage.py createsuperuser 2. from django.contrib import auth au ...

  7. 微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友

    之前写过一篇使用微信JS-SDK来实现扫一扫功能的博客 微信公众号开发–微信JS-SDK扫一扫功能 在该博客里介绍了微信JS-SDK的基本用法,其中包括以下几个步骤 还详细介绍了通过config接口注 ...

  8. 005__C#修改软件图标

    (一)项目右键属性 (二)应用程序-->图标          图标转换:http://www.faviconico.org/ (三)窗体右键属性更改窗体里面的图标 (四)修改名字

  9. GreenPlum 数据库创建用户、文件空间、表空间、数据库

    前几篇文章介绍了GreenPlum数据库的安装.启动.关闭.状态检查.登录等操作,数据库已经创建好了,接下来介绍如何使用数据库.按照习惯,需要先创建测试用户.表空间.数据库.先创建测试用户dbdrea ...

  10. luogu 2152

    SuperGcd 二进制算法 1. A = B, Gcd(A, B) = A; 2. A,B为偶数,  Gcd(A, B) = 2 * Gcd(A / 2, B / 2); 3. A 为偶数, B 为 ...