`

对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

分享到:
评论

相关推荐

    List 对象属性排序

    ### List对象属性排序知识点 #### 一、概述 在Java编程中,经常需要对`List`集合中的对象按照特定属性进行排序。传统的方法是在每个实体类中重写`Comparable`接口或提供比较器(`Comparator`),这不仅增加了代码...

    C#对list列表进行随机排序的方法

    总的来说,C#中对list列表进行随机排序的方法主要依赖于随机数生成器,通过生成随机索引并插入元素,可以轻松实现列表的随机化。这种技巧在各种场景中都很有用,比如模拟随机事件、游戏中的随机生成等。希望这个方法...

    List对象排序通用方法

    本文将详细讨论如何对包含对象的`List`进行排序,包括正序和倒序,以及如何按指定参数排序。 首先,我们可以使用`Collections.sort()`方法对`List`进行排序。这个方法适用于已经实现了`Comparable`接口的元素类型,...

    c# List类排序方法

    通过对`List&lt;T&gt;`类的排序方法的学习,我们可以灵活地对不同类型的对象进行排序。通过自定义比较器,我们可以实现更复杂的排序逻辑。此外,`List&lt;T&gt;`还支持部分排序,进一步增强了排序功能的灵活性。理解并掌握这些...

    java版本List中对象多属性排序.rar

    在Java编程中,对List集合中的对象进行多属性排序是一项常见的任务。这通常涉及到自定义比较逻辑,以满足复杂的数据排序需求。在这个“java版本List中对象多属性排序.rar”压缩包中,我们可能找到了一个关于如何在...

    java中List对象列表实现去重或取出及排序的方法

    在Java中,对List对象列表实现去重或取出及排序是一种常见的操作。下面将详细介绍相关的方法和实现。 1. 实体类重写equals和hashCode方法 在Java中,想要去重List对象列表,首先需要重写实体类的equals和hashCode...

    arraylist 对象 数组排序

    当我们说“arraylist对象中的某个值排序”时,这通常指的是对ArrayList中的元素,而不是ArrayList本身进行排序。ArrayList不支持直接排序,但是我们可以通过调用Collections.sort()方法或者自定义Comparator来实现。...

    Java对List对象进行排序_.docx

    在Java编程中,对List对象进行排序是一个常见的需求,尤其是在处理数据集合时。Java提供了一个便捷的方法`Collections.sort()`,可以直接对实现了`Comparable`接口的List进行排序。然而,当需要根据对象内部的某个...

    JAVA像SQL一样对List对象集合进行排序

    JAVA像SQL一样对List对象集合进行排序 在本文中,我们将详细介绍如何使用JAVA像SQL一样对List对象集合进行排序。我们将通过五个部分,分别介绍字符串List排序、整数类型List排序、对象字段对对象List排序、使用...

    Java对List多个排序、查询条件的处理

    对于多维度排序,我们通常需要对List中的对象属性进行排序。这可以通过`Comparator`的嵌套使用来实现,或者在Java 8及以上版本中,可以利用`Comparator.comparing()`方法链式调用来实现: ```java list.sort...

    List中保存对象,按对象中某一属性排序【含程序源码】

    本篇文章将详细讲解如何在List中保存对象,并按照对象中的某一属性来对这些对象进行排序。同时,我们将提供一段源码示例,以帮助你更好地理解和实现这个功能。 首先,我们要明白,列表(List)是Java集合框架中的一个...

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

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

    List 对象排序 Demo

    本篇将通过一个名为"List对象排序Demo"的主题,深入探讨如何对Python中的`List`对象进行排序,以及相关的一些源码分析和实用工具。 首先,Python的`List`对象提供两种主要的排序方式:`sort()`方法和`sorted()`函数...

    java List 排序 Collections.sort

    当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...

    C# List OrderBy 动态多字段排序

    `OrderBy` 方法是 LINQ(Language Integrated Query) 提供的一个非常方便的排序工具,它允许我们按照一种或多种字段对数据进行升序排序。在某些情况下,我们可能需要根据动态指定的字段进行排序,这在处理复杂数据...

    Java中对list元素进行排序的方法详解

    在Java编程中,对List元素进行排序是一项常见的操作,特别是在处理数据集合时。本文将详细介绍如何在Java中对List元素进行排序,包括两种主要的方法:使用Comparable接口和Comparator接口。 1. **使用Comparable...

    List对象集合的排序:比较器Comparator(简单例子)

    当需要对`List`中的对象进行自定义排序时,`Comparator`接口就派上了用场。`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`...

    java 使用Collections类对List的排序操作

    1. **自然排序**:如果 `List` 中的元素是实现了 `Comparable` 接口的对象,那么可以使用 `Collections.sort()` 方法进行自然排序。`Comparable` 接口定义了一个 `compareTo()` 方法,该方法用于比较对象之间的大小...

Global site tag (gtag.js) - Google Analytics