java List的排序

List自定义排序

1、第一种方法,就是list中对象实现Comparable接口,重写compareTo接口, 对排序的字段进行比较。
2、第二种方法,就是在重载Collections.sort方法。

代码示例

package com.xmy.list.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * description:list排序
 * Created with IDEA
 * User:xumingyang
 * Date:2016/10/14
 * Time:10:10
 */
public class ListMain {

    public static void main(String[] args) {
        comparePersonOrder();
        compareStudentOrder();
        compareStudentOrder2();
    }

    /**
     * 重载Collections.sort
     */
    public static void compareStudentOrder2(){
        List<Student> listA = new ArrayList<Student>();
        listA.add(new Student("name2", 2));
        listA.add(new Student("name1", 1));
        listA.add(new Student("name3", 3));

        Collections.sort(listA, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getOrder().compareTo(o2.getOrder());
            }
        });

        System.out.println("**********升序**********");
        for (Student s : listA) {
            System.out.println(s);
        }
    }

    /**
     * 重载Collections.sort
     */
    public static void compareStudentOrder(){
        List<Student> listA = new ArrayList<Student>();
        listA.add(new Student("name2", 2));
        listA.add(new Student("name1", 1));
        listA.add(new Student("name3", 3));

        System.out.println("**********升序**********");
        //升序
        Collections.sort(listA, new SortNum());
        for (Student s : listA) {
            System.out.println(s);
        }
        //降序
        System.out.println("**********降序**********");
        Comparator result = Collections.reverseOrder(new SortNum());
        Collections.sort(listA,result);
        for (Student s : listA) {
            System.out.println(s);
        }

    }

    /**
     * Person实现Comparable接口
     */
    public static void comparePersonOrder(){
        List<Person> listA = new ArrayList<Person>();
        listA.add(new Person("name2", 2));
        listA.add(new Person("name1", 1));
        listA.add(new Person("name3", 3));
        //升序
        Collections.sort(listA);
        System.out.println("**********升序**********");
        for (Person p : listA) {
            System.out.println(p);
        }
        //降序
        Collections.reverse(listA);
        System.out.println("**********降序**********");
        for (Person p : listA) {
            System.out.println(p);
        }
    }

}

/**
 * 比较器类
 */
class SortNum implements Comparator{
    @Override
    public int compare(Object o1, Object o2){
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;
        return s1.getOrder() - s2.getOrder();
    }
}

class Student {

    private String name;
    private Integer order;

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

    public String getName() {
        return name;
    }

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

    public Integer getOrder() {
        return order;
    }

    public void setOrder(Integer order) {
        this.order = order;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", order=" + order +
                ‘}‘;
    }
}

class Person implements Comparable<Person> {

    private String name;
    private Integer order;

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

    public Person(String name, Integer order){
        this.name = name;
        this.order = order;
    }

    public String getName() {
        return name;
    }

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

    public Integer getOrder() {
        return order;
    }

    public void setOrder(Integer order) {
        this.order = order;
    }

    @Override
    public int compareTo(Person arg0) {
        return this.getOrder().compareTo(arg0.getOrder());
    }

}

对复合数据类型的数据的排序

package com.xmy.list.sort;

import java.util.Arrays;
import java.util.Comparator;

/**
 * description:
 * Created with IDEA
 * User:xumingyang
 * Date:2016/11/14
 * Time:15:55
 */
public class ArrayTest {

    public static void main(String[] args) {
        compareOrder();
    }

    /**
     * 排序
     */
    public static void compareOrder(){
        Point[] points = new Point[4];
        for(int i=0;i<4;i++)
            points[i]=new Point();
        //初始化数据
        points[0].order_1=2;points[0].order_2=1;
        points[1].order_1=2;points[1].order_2=2;
        points[2].order_1=1;points[2].order_2=2;
        points[3].order_1=0;points[3].order_2=1;
        //自定义排序
        Arrays.sort(points, new MyComprator());
        //输出排序结果
        for(int i=0;i<4;i++)
            System.out.println("排序后("+points[i].order_1+","+points[i].order_2+")");
    }

}

class Point{
    int order_1;
    int order_2;
}

/**
 * 比较器类
 */
class MyComprator implements Comparator {
    public int compare(Object arg0, Object arg1) {
        Point point_1 = (Point)arg0;
        Point point_2 = (Point)arg1;
        //优先按order_1进行升序排列
        if(point_1.order_1 != point_2.order_1)
            return point_1.order_1 > point_2.order_1 ? 1:-1;
        //再按order_2进行升序排列
        else
            return point_1.order_2 > point_2.order_2 ? 1:-1;
    }
}

  

List默认排序

    /**
     * 默认list排序方法
     */
    public static void sortList(){
        List<String> list = new ArrayList();
        list.add("赵");
        list.add("钱");
        list.add("孙");
        list.add("李");
        list.add("周");

        //注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
        System.out.println("**********升序**********");
        Collections.sort(list,Collator.getInstance(Locale.CHINA));
        for(String temp : list){
            System.out.println(temp);
        }
        System.out.println("**********降序**********");
        Collections.reverse(list);
        for(String temp : list){
            System.out.println(temp);
        }
    }

数组的排序

1、int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列

    /**
     * 默认数组排序方法
     */
    public static void sortArray(){
        String[] names = {"赵",  "钱", "孙", "李", "周"};
        System.out.println("排序前:" + Arrays.toString(names));
        //Arrays.sort(names);  排序无效
        Arrays.sort(names, Collator.getInstance(Locale.SIMPLIFIED_CHINESE));//升序;
        System.out.println(" 升序:" + Arrays.toString(names));

        Integer[] ages = {5,7,2,8,1};
        System.out.println("排序前:" + Arrays.toString(ages));
        Arrays.sort(ages);
        System.out.println(" 升序:" + Arrays.toString(ages));
    }

  

枚举类型的排序

对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,跟值的字母先后顺序无关。

  

时间: 2024-12-29 10:14:01

java List的排序的相关文章

java之选择排序

 //选择排序(Select Sorting)也是一种简单的排序方法.它的基本思想是:第一次从R[0]-R[n-1]中选取最小值,与R[0]交换,第二次从R[1]-R[n-1]中选取最小值,与R[1]交换,第三次从R[2]-R[n-1]中选取最小值,与R[2]交换,...,第i次从R[i-1]-R[n-1]中选取最小值,与R[i-1]交换,...,第n-1次从R[n-2]-R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列. public st

Comparable与Comparator,java中的排序与比较

1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如string提供了按字母进行比较,int提供了按整数大小进行比较. 2:Comparable与Comparator but,在软件开发的世界中,任何没有代码的堆概念都是耍流氓.所以,无论我们解释的多么完美,必须show me the code: 我们首先看这样一段代码: public class Collect

java编程之排序

第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. 1 /** 2 * 最原始的冒泡排序. 3 * 效率低. 4 * 因为趟数和次数最多.都是按最大化的循环次数进行循环 5 * @Title: sort 6 * @Description: TODO(这里用一句话描述这个方法的作用) 7 * @param arr 8 * @return void 返回类型 9 * @author 尚晓飞 10 * @date 2014-8-5 上午8:42:4

Java中各种排序算法

//插入排序:package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil;/** * @author treeroot * @since 2006-2-2 * @version 1.0 */public class InsertSort implements SortUtil.Sort{ /** (non-Javadoc) * @see org.rut.util.algorithm.SortUtil

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当

Java中冒牌排序算法

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面. 即首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后.重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数.如此下去,直至最终

Java集合类Sort排序的使用方法

//对整数集合进行排序 public void sortIntArray() { int[] array = new int[] { 8, 5, 9, 0, 6, 3, 4, 7, 2, 1 }; System.out.println("整数排序前"); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } System.out.println(); Array

01. Java的经典排序--选择排序--冒泡排序--折半查找(二分查找)

Java的经典排序--选择排序--冒泡排序--折半查找 选择排序 选择排序 3 2 1 5 8 0 1 3 2 5 8 1 1 2 3 5 8 2 1 2 3 5 8 3 1 2 3 5 8 public static void main(String[] args) { int[] arr={3,2,1,5,8}; selectSort(arr); for(int i = 0 ; i < arr.length ; i ++){ System.out.println(arr[i]) ; } }

Java Collections的排序之二

package test.list; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; public class Link_T

java实现选择排序

<span style="font-size:18px;">package two.java.test; /** * java中的选择排序 * @author hello * */ public class SelectionSort{ public static void main(String args[ ]){ int [ ]intArray={12,11,45,6,8,43,40,57,3,20}; int keyValue;//选择值 int index;//数组