Collections.sort()用法

Collections.sort()用法


介绍

用于对List类型数据排序。

  • 方法一

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

    List中对象需实现Comparable接口并重写compareTo方法。

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

    通过实现Comparator接口的compare方法来完成自定义排序。

实现举例

方法一

  • Integer对象排序

    可直接调用,因为Integer对象已实现Comparable接口。

    List<Integer> intList = Arrays.asList(2, 3, 1, 5, 4, 6);
    Collections.sort(intList);
  • 其它对象排序
    • Person对象

      实现Comparable接口,重写compareTo方法实现排序。

      public class Person implements Comparable<Person> {
      
              private String name;
              private int age;
      
              public Person(String name, int age) {
                  this.setName(name);
                  this.setAge(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;
              }
      
              @Override
              public int compareTo(Person o) {
                  // 按年龄正序排序
                  return this.getAge() - o.getAge();
              }
          }
    • 调用测试
      List<Person> list = new ArrayList<Person>();
      list.add(new Person("King", 11));
      list.add(new Person("Sky", 15));
      list.add(new Person("Kitty", 7));
      list.add(new Person("Yohn", 18));
      
      Collections.sort(list);

方法二

  • Person对象

    对象无需实现Comparable接口。因此,方法二使用起来更加灵活。

    public class Person {
    
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.setName(name);
            this.setAge(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;
        }
    }
  • 调用测试
    List<Person> list = new ArrayList<Person>();
    list.add(new Person("King", 11));
    list.add(new Person("Sky", 15));
    list.add(new Person("Kitty", 7));
    list.add(new Person("Yohn", 18));
    
    Collections.sort(list, new Comparator<Person>() {
    
        @Override
        public int compare(Person p1, Person p2) {
            // 按年龄正序排序
            return p1.getAge() - p2.getAge();
            // 按年龄倒序排序
            // return p2.getAge() - p1.getAge();
        }
    
    });

解析

通过查看源码,两种方法实现排序都使用了Tim Sort算法(结合了归并排序与插入排序)。调用compareTocompare方法进行判断,影响最终的排序结果。所以,按需求重写compareTocompare方法,可达成排序目标。

PS:版本为 JDK 1.8 。其它版本使用了不同的排序算法。

原文地址:https://www.cnblogs.com/wscy/p/9441792.html

时间: 2024-10-30 02:29:10

Collections.sort()用法的相关文章

Collections.sort()用法简单介绍

在开发过程中,在对list集合的排序中遇到了点小阻碍.记录之,与君共勉. 我们先来看看,Collections.sort()的简单用法,代码: package com.wh.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test {

Collections.sort new Compartor&lt;&gt; 用法

    public List<OrderItemAttributeDispInfoBean> sortOrderItemAttributes(List<OrderItemAttributeDispInfoBean> orderItemAttributes){              Collections.sort( orderItemAttributes, new Comparator<OrderItemAttributeDispInfoBean>(){     

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) {

Collections.sort的两种用法 转

Java代码   /** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortTest { public stati

java中Collections.sort() 排序函数的用法

用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 

Android Collections.sort的几种用法介绍

Java代码   /** * @author alex * @version 创建时间:2014-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortTest { public stati

Java中Collections.sort()的用法

Java中Collections.sort()的使用: 在日常开发中,很多时候都需要对一些数据进行排序的操作.然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中.他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是可比较的. 怎么让一个对象是 可比较的,那就需要该对象实现 Comparable<T> 接口啦.然后重写里面的compareTo()方法.我们可以看到Java中很多类都是实现类这个接口的 如:Integer,Lo

Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set是并列的. Collections.sort() 排序方法,实现对List对象中的元素进行排序. package com.test.collection; import java.util.ArrayList; import java.util.Collections; import java.ut

Collections.sort() in JDK1.6

本文主要介绍了Collections.sort方法在JDK1.6中的源码实现(JDK版本1.6.0_45) 1.Collections.sort() public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator) c); ListIterator i = list.listIterat