java List的排序

news/2024/7/23 11:23:31 标签: java, 开发工具

List自定义排序

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

代码示例

java">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:xmy
 * 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());
    }

}

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

java">package com.xmy.list.sort;

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

/**
 * description:
 * Created with IDEA
 * User:xmy
 * 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默认排序

java">    /**
     * 默认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类之只是提供了默认的升序排列

java">    /**
     * 默认数组排序方法
     */
    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)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,跟值的字母先后顺序无关。

  

转载于:https://www.cnblogs.com/xmyclass/p/6062189.html


http://www.niftyadmin.cn/n/1830026.html

相关文章

Java编程思想小笔记

1.所有的类最终都继承自单一的基类-Object类&#xff0c;这就是单根继承结构&#xff0c;那么所有的接口是不是都继承自单一的基接口呢&#xff1f;&#xff1f; 2.java数据的存储&#xff1a;java对象主要存在于RAM中的堆中&#xff0c;堆不同于堆栈的好处是&#xff1a;编译器…

postgresql之词法分析简介

一、词法文件结构 flex的词法输入文件.l 结构通过%%分成三部分 声明 规则 c 代码 声明中 %{ C代码声明 %} 中包裹的内容将直接原样拷贝到生成的C代码中&#xff0c; 最后的段也是直接原样拷贝到生成的C代码中&#xff0c; 中间的规则段&#xff0c;每个规则由 模式 动作…

Easyui 生成layout

Easyui 生成layout var $tabs;var $body;var $south;function appendLayout(title, href) {if (!$body)$body $(document.body);if (!$body.hasClass(layout)) {var $centerHtml $("<div>", {"id": "center","style": "…

(转)Java web 项目中文件路径

为什么80%的码农都做不了架构师&#xff1f;>>> 源链接;http://blog.sina.com.cn/s/blog_6b695d5c01015dkp.html 前言 Java的路径问题&#xff0c;非常难搞。最近的工作涉及到创建和读取文件的工作&#xff0c;这里我就给大家彻底得解决Java路径问题。 我编写了一个…

MYSQL主从同步故障一例及解决过程

公司里有两个mysql服务器做主从同步&#xff0c;某天Nagios发来报警短信&#xff0c;mysqla is down...赶紧联系机房&#xff0c;机房的人反馈来的信息是 HARDWARE ERROR 后面信息省略&#xff0c;让机房记下错误信息后让他们帮忙重启下看是不是能正常起来&#xff0c;结果竟然…

使用 hexdump dump 文件内容

名词解释 【dump】 dump 是指把文件的内容&#xff0c;每个字节用2位十六进制数来表示的方式。 缘由 最近看矢泽久雄的《How Program Works》&#xff0c;了解到 dump “exe文件”&#xff08;恕我不知该如何将 dump 汉化&#xff09;。然后在系统&#xff08;Windows 7&#x…

JavaWeb学习笔记之JSP(一)

1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页&#xff0c;但是其中的静态网页内容也需要程序员使用Java语言来进行输出&#xff0c;这就造成了大量代码的冗余&#xff0c;使整个Servlet维护起来将会变的困难。 1.2. Java Server P…

XmlParser和HtmlParser

经常要用的Xml和Html解决&#xff0c;实际上这个领域也有非常好的解决方案。 相对来说现在各种开源的Xml解析功能比较丰富&#xff0c;机制也比较灵活&#xff0c;但是由于他功能比较完善&#xff0c;干的事情比较多&#xff0c;所以性能方面也慢一点&#xff1b;另外&#xf…