`

对List里的对象元素进行排序

阅读更多

        对List里的对象元素进行排序,有两种方法,第一个是实例化比较器,第二个是实现Comparable接口。

一.实例化比较器

Student.java

package com.bijian.study;

public class Student {
    
    private int studentId;
    private String studentName;
    private int age;

    public Student(int studentId, String studentName, int age) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.age = age;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Main.java

package com.bijian.study;

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

/**
 * 实例化一个比较器
 */
public class Main {

    public static void main(String[] args) {
        
        Student stu1 = new Student(1, "zhangsan", 28);
        Student stu2 = new Student(2, "zhagnsan", 19);
        Student stu3 = new Student(3, "wangwu", 19);
        Student stu4 = new Student(4, "wangwu", 19);
        Student stu5 = new Student(5, "zhaoliu", 18);

        ArrayList<Student> list = new ArrayList<Student>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);
        
        Comparator<Student> comparator = new Comparator<Student>() {
            public int compare(Student s1, Student s2) {
                // 先排年龄
                if (s1.getAge() != s2.getAge()) {
                    return s1.getAge() - s2.getAge();
                } else if (!s1.getStudentName().equals(s2.getStudentName())) {
                    // 年龄相同则按姓名排序
                    return s1.getStudentName().compareTo(s2.getStudentName());
                } else {
                    // 姓名也相同则按学号排序
                    return s1.getStudentId() - s2.getStudentId();
                }
            }
        };
        
        //这里就会自动根据规则进行排序
        Collections.sort(list, comparator);
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println("年龄:" + stu.getAge() + "   姓名:" + stu.getStudentName() + "   学号:" + stu.getStudentId());
        }
    }
}

运行结果:

年龄:18   姓名:zhaoliu   学号:5
年龄:19   姓名:wangwu   学号:3
年龄:19   姓名:wangwu   学号:4
年龄:19   姓名:zhagnsan   学号:2
年龄:28   姓名:zhangsan   学号:1

 

二.实现Comparable接口

Student2.java

package com.bijian.study;

public class Student2 implements Comparable<Student2> {
    
    private int studentId;
    private String studentName;
    private int age;

    public Student2(int studentId, String studentName, int age) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.age = age;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int compareTo(Student2 o) {
        if (age != o.getAge()) {
            return age - o.getAge();
        } else if (!studentName.equals(o.getStudentName())) {
            return studentName.compareTo(o.getStudentName());
        } else {
            return studentId - o.getStudentId();
        }
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Student2) {
            Student2 stu = (Student2) obj;
            if ((age == stu.getAge()) && (studentName.equals(stu.getStudentName()))
                    && (studentId == stu.getStudentId())) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Main2.java

package com.bijian.study;

import java.util.ArrayList;
import java.util.Collections;

/**
 * 实现Comparable接口
 */
public class Main2 {

    public static void main(String[] args) {
        
        Student2 stu1 = new Student2(1, "zhangsan", 28);
        Student2 stu2 = new Student2(2, "zhagnsan", 19);
        Student2 stu3 = new Student2(3, "wangwu", 19);
        Student2 stu4 = new Student2(4, "wangwu", 19);
        Student2 stu5 = new Student2(5, "zhaoliu", 18);

        ArrayList<Student2> list = new ArrayList<Student2>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);
        
        //这里就会自动根据规则进行排序
        Collections.sort(list);
        
        //输出查看结果
        for (int i = 0; i < list.size(); i++) {
            Student2 stu = list.get(i);
            System.out.println("年龄:" + stu.getAge() + "   姓名:" + stu.getStudentName() + "   学号:" + stu.getStudentId());
        }
    }
}

运行结果:

年龄:18   姓名:zhaoliu   学号:5
年龄:19   姓名:wangwu   学号:3
年龄:19   姓名:wangwu   学号:4
年龄:19   姓名:zhagnsan   学号:2
年龄:28   姓名:zhangsan   学号:1

        注:大家可以看下api文档里对接口 Comparable<T>接口的介绍,里面说是建议重写equals方法,否则可能出现怪异的表现。

 

文章来源:http://blog.csdn.net/ystyaoshengting/article/details/7448773

分享到:
评论

相关推荐

    Python3实现对列表按元组指定列进行排序的方法分析

    本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下: Python版本: python3.+ 运行环境: Mac OS IDE: pycharm Python内建的排序方法 1 排序方法介绍 Python中有2个...

    基于python list对象中嵌套元组使用sort时的排序方法

    下面小编就为大家分享一篇基于python list对象中嵌套元组使用sort时的排序方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Python sorted对list和dict排序

     – key –主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。  – reverse — 排序规则,reverse = True 降序 , reverse = False 升序...

    java中set、list和map的使用方法实例

    // 学习List对象容器的使用 // List容器中的对象允许重复 // 常用的list接口的实现类有ArrayList和LinkedList // 学习map对象容器的使用 // map对象容器里面储存的元素是(key,value)形式的键值对,比如(a,1)(b,20)...

    Python List列表对象内置方法实例详解

    本文实例讲述了Python List列表对象内置方法。分享给大家供大家参考,具体如下: 前言 在上一篇中介绍了Python的序列和String类型的内置方法,本篇继续学习作为序列类型成员之一的List类型的内置方法。 软件环境 ...

    测量程序编制 - python 27数据类型:List(列表)-函数.pptx

    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。 ;...

    如何实现java8 list按照元素的某个字段去重

    主要介绍了如何实现java8 list按照元素的某个字段去重,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下

    set.list.map接口

    3.Map(映射&lt;集合&gt;)是无序的,是一种把键对象和值对象进行映射的集合,它每一个元素都包含一对键对象和值对象,给出键对象就可以得到值对象,键对象不允许重复,对值没有要求,多个任意键对象可以映射到一个值对象...

    测量程序编制 - python 19数据类型:序列(函数sorted).pptx

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的...

    根据某个属性对List中的所有对象分组,该属性值相同的对象分到一个组

    前段时间跟公司前端对接的时候,一个简单的数据库查询,但是前端说将结果按某个属性分组,每组单独一个集合,集合第一个元素为该属性,第二个元素为该属性值相同的所有对象集合,由于是小白一个,这个数据整理也是花...

    数据结构之线性表及其应用

    给顺序表和链表的实现分别使用添加成员函数以及对象的应用两种方法实现线性表中元素的逆置(reverse)和单个元素移动到特定位置的操作(move)。 编写一个函数,用于合并两个顺序表。输入的顺序表按照其元素从小到大排序...

    python3排序的实例方法

    key — 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse — 排序规则,reverse = True 降序, reverse = False 升序(默认)...

    C#实现泛型List分组输出元素的方法

    背景:在输出列表时,往往需要按照某一字段进行分组,比如在输出城市列表时,按照首字母进行分组,输出学生列表时,按照年级进行分组,然后再对分组的结果按照其他的字段进行排序。 如存在以下STU学生类,代码如下:...

    Java《面向对象程序设计》实验报告五

    2、按顺序把1,10,5,7,6,2,9,20,14,存入到List中(注:允许自己自定义任何数),并对其进行排序,打印其升序和降序排列的结果。然后再向List中 位置为第四位插入数 35看看会有啥结果?再向List中插入字符串“ddy”,...

    java实现别踩白块儿源码-SortedList:用Java编写的SortedList的实现。可以与实现Comparable接口的对象一起使用

    它是使用Comparator对象构造的,该对象可以将两个对象进行比较,从而使SortedList可以将其元素按升序或降序排序。 当且仅当要使用的对象实现Comparable接口时,我们也可以创建不带Comparator对象的SortedList。 用法...

    集合anylist要进行筛选.pdf

    集合就如同数组,用来存储和管理一组特定类型的数据对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。在使用数组和集合时要先...

    JAVA JDK8 List分组获取第一个元素的方法

    今天小编就为大家分享一篇关于JAVA JDK8 List分组获取第一个元素的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Python实现按学生年龄排序的实际问题详解

    输出:按照年龄age进行排序好的List。 思路1:使用冒泡排序,比较相邻的学生,如果第一个学生的age值比第二个学生的age值大,那么就整体交换这两个元素。持续每次对越来越少的元素重复上面的步骤。一直到没有任何...

    c#的sortedlist使用方法

    表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。 SortedList最合适对一列健/值对 进行排序,在排序时,是对键进行排序,Sorted...每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能

    Python将列表中的元素转化为数字并排序的示例

    本文实例讲述了Python中列表元素转为数字的方法。...2. Python3.x,map返回的是map对象,当然也可以转换为List: numbers = list(map(int, numbers)) 排序: 使用sorted函数,从小到大排序: numbers = sorted(number

Global site tag (gtag.js) - Google Analytics