Java sort集合排序的两种方式解析

这篇文章主要介绍了Java sort集合排序的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Comparable和Comparator

public static <T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序 (我们在自己的类里面实现Comparabl接口方法compareTo)
public static <T> void sort(List<T> list, Comparator<? super T>); 将集合中的数据按照指定规则进行排序

Comparable

/**
 * @author gw
 * @date 2019/11/5 0005 下午 22:15
 */

/*
 * public static<T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序
 *
 * 注意:
 *   sort使用前提:被排序的集合里面存储的元素,必须实现Comparable(接口),重写接口中的方法compareTo,定义排序规则
 *
 *   升序: this - 参数
 *      return 0;就是按照原来顺序输出
 *
 *
 * */
public class Demo02Sort {
  public static void main(String[] args) {
    ArrayList<Person> objects = new ArrayList<>();
    objects.add(new Person("小明", 23));
    objects.add(new Person("小红", 24));
    objects.add(new Person("小绿", 22));

    System.out.println("objects = " + objects);
    Collections.sort(objects);
    System.out.println("objects = " + objects);
  }
}

class Person implements Comparable<Person> {
  private String name;
  private int age;

  @Override
  public int compareTo(Person person) {
//    return 0;
    return this.getAge() - person.getAge();

  }

  @Override
  public String toString() {
    return "Person{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
  }

  public Person() {
  }

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  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;
  }
}

Comparator

/**
 * @author gw
 * @date 2019/11/5 0005 下午 22:40
 */

/*
 * Comparator
 * Comparable都是接口
 *
 * public static <T> void sort(List<T> list, Comparator<? super T> c)
 *
 * Comparable: 我们的类继承Comparable接口,然后实现里面的CompareTo方法,
 *       如何调用:Collections.sort(arrayList)
 *
 * Comparator: 我们的类不用继承Comparable接口,也不用继承Comparator接口
 *       如何调用:Collections.sort(objects, new Comparator<Person1>() { // 匿名类
            @Override
            public int compare(Person1 person1, Person1 t1) {
              int res = person1.getAge() - t1.getAge();
              // 前面减去后面,升序排列
              if (res == 0) {
                return person1.getName().charAt(0) - t1.getName().charAt(0);
              }
              return res;
            }
          });
 *
 * */
public class Demo03SortComparator {
  public static void main(String[] args) {
    ArrayList<Person1> objects = new ArrayList<>();
    objects.add(new Person1("b小明", 23));
    objects.add(new Person1("小红", 24));
    objects.add(new Person1("小绿", 22));
    objects.add(new Person1("a小绿", 23));

    System.out.println("objects = " + objects);
    Collections.sort(objects, new Comparator<Person1>() {
      @Override
      public int compare(Person1 person1, Person1 t1) {
//        return 0;
        int res = person1.getAge() - t1.getAge();

        // 前面减去后面,升序排列
        if (res == 0) {
          return person1.getName().charAt(0) - t1.getName().charAt(0);
        }
        return res;
      }
    });
    System.out.println("objects = " + objects);
  }
}

class Person1 {
  private String name;
  private int age;

  @Override
  public String toString() {
    return "Person{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
  }

  public Person1() {
  }

  public Person1(String name, int age) {
    this.name = name;
    this.age = age;
  }

  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;
  }
}
* Comparable: 我们的类继承Comparable接口,然后实现里面的CompareTo方法,
 *       如何调用:Collections.sort(arrayList)
 *
 * Comparator: 我们的类不用继承Comparable接口,也不用继承Comparator接口
 *       如何调用:Collections.sort(objects, new Comparator<Person1>() { // 匿名类
            @Override
            public int compare(Person1 person1, Person1 t1) {
              int res = person1.getAge() - t1.getAge();
              // 前面减去后面,升序排列
              if (res == 0) {
                return person1.getName().charAt(0) - t1.getName().charAt(0);
              }
              return res;
            }
          });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA对list集合进行排序Collections.sort()

    对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序.代码如下: 进行降序排列 进行降序排列 Collections.sort(list, new Comparator<ResultTypeDesc>() { public int compare(ResultTypeDesc o1, ResultTypeDesc o2) { return o2.getRatio().compareTo(o1.getRatio()); } }); 进行升序排列 Collections.sort

  • Java排序方法sort用法详解

    本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下 对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用java.util.Arrays对象的sort方法 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } 对集合的排序: //对list升序排序 public void

  • 用Java集合中的Collections.sort方法如何对list排序(两种方法)

    第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class User implements Comparable <user> { private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } publi

  • Java Collections.sort()实现List排序的默认方法和自定义方法

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list.add("王硕"); list.add("李明"); list.add("刘迪"); list.add("刘布"); //升序 Collections.sort(list,Collator.getInstance(java.uti

  • java中的arrays.sort()代码详解

    Arrays.sort(T[], Comparator < ? super T > c) 方法用于对象数组按用户自定义规则排序. 官方Java文档只是简要描述此方法的作用,并未进行详细的介绍,本文将深入解析此方法. 1. 简单示例 sort方法的使用非常的简单明了,下面的例子中,先定义一个比较Dog大小的Comparator,然后将其实例对象作为参数传给sort方法,通过此示例,你应该能够快速掌握Arrays.sort()的使用方法. import java.util.Arrays; impo

  • 图文讲解Java中实现quickSort快速排序算法的方法

    相对冒泡排序.选择排序等算法而言,快速排序的具体算法原理及实现有一定的难度.为了更好地理解快速排序,我们仍然以举例说明的形式来详细描述快速排序的算法原理.在前面的排序算法中,我们以5名运动员的身高排序问题为例进行讲解,为了更好地体现快速排序的特点,这里我们再额外添加3名运动员.实例中的8名运动员及其身高信息详细如下(F.G.H为新增的运动员): A(181).B(169).C(187).D(172).E(163).F(191).G(189).H(182) 在前面的排序算法中,这些排序都是由教练主

  • 浅谈Java之Map 按值排序 (Map sort by value)

    Map是键值对的集合,又叫作字典或关联数组等,是最常见的数据结构之一.在java如何让一个map按value排序呢? 看似简单,但却不容易! 比如,Map中key是String类型,表示一个单词,而value是int型,表示该单词出现的次数,现在我们想要按照单词出现的次数来排序: Map map = new TreeMap(); map.put("me", 1000); map.put("and", 4000); map.put("you", 3

  • java中Collections.sort排序函数用法详解

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

  • Java sort集合排序的两种方式解析

    这篇文章主要介绍了Java sort集合排序的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Comparable和Comparator public static <T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序 (我们在自己的类里面实现Comparabl接口方法compareTo) public static <T> void sort(List<T&g

  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    本文实例讲述了Java基于递归和循环两种方式实现未知维度集合的笛卡尔积.分享给大家供大家参考,具体如下: 什么是笛卡尔积? 在数学中,两个集合X和Y的笛卡儿积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员. 假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}. 如何用程序算法实现笛卡尔积? 如果编程前已知集合的数量

  • java 数组转list的两种方式

    方式一 String[] array = {"111","222","333"}; List<String> list = Arrays.asList(array); // list.add("444"); list.remove(0); 如上图所示,不可进行新增或删除元素的操作. Arrays.asList(array),返回的List是具有固定长度的私有静态内部类java.util.Arrays.ArrayLi

  • Java 连接Access数据库的两种方式

    java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来程序部署的每个机器上都要进行设置不方面.所以现在不会使用啦. 2.JDBC java也可以和连接其他数据库一样连接MS Access,导入数据库相应的jar包,进行连接. 复制代码 代码如下: java Access JDBC jar包:Access_JDBC30.jar 具体连接,参考下面代码: 复制代

  • 浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    clone() 方法麻烦一些,需要将所有涉及到的类实现声明式接口 Cloneable,并覆盖Object类中的clone()方法,并设置作用域为public(这是为了其他类可以使用到该clone方法). 序列化的方法简单,需要将所有涉及到的类实现接口Serializable package b1ch06.clone; import java.io.Serializable; class Car implements Cloneable, Serializable { private String

  • 详解Java执行groovy脚本的两种方式

    记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocable来传递参数并获取执行结果: Invocable:脚本引擎的解释器接口,提供invokeFunction和invokeMethod两种传递参数并获取执行结果的方法,Java JDK API文档解释如下: invokeFunction: invokeMethod: 以下为案例: 引入依赖 <depe

  • spring级联属性赋值的两种方式解析

    这篇文章主要介绍了spring级联属性赋值的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Car.java package com.gong.spring.beans; public class Car { private String name; public String getName() { return name; } public void setName(String name) { this.name = name

  • 分享java中设置代理的两种方式

    1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 import java.net.Authenticator; import java.net.PasswordAuthentication; import java.util.Properties; public class ProxyDemo1 { public

  • java实现消息队列的两种方式(小结)

    实现消息队列的两种方式 Apache ActiveMQ官方实例发送消息 直接在Apache官网http://activemq.apache.org/download-archives.html下载ActiveMQ源码 下载解压后拿到java代码实例 然后倒入IDE 如下: 请认真阅读readme.md文件,大致意思就是把项目打成两个jar包,然后启动服务,然后同时运行打的两个jar包,然后就能看到具体的调用信息.打jar包时直接利用maven打就行了,不用修改代码. 启动服务: 利用Spring

  • Java中Http连接的两种方式(小结)

    在java中连接http,介绍两种方法,一种是java的HttpUrlConnection,另一种是apacha公司的httpClient,后者是第三方的类库需要从外部,导入,同时这也是第一次使用外部的类库,以后还会有很多需要导入外部类库的需求. http协议是基于tcp的一种协议. tcp是一种保证可靠连接的传输协议,通过三次握手,和丢失重传的机制保证数据的传输. 首先来看HttpUrlConnection 这个类是java自带的,直接import就行. 使用tcp连接的过程几乎都一样,htt

随机推荐