对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对象属性排序知识点 #### 一、概述 在Java编程中,经常需要对`List`集合中的对象按照特定属性进行排序。传统的方法是在每个实体类中重写`Comparable`接口或提供比较器(`Comparator`),这不仅增加了代码...
总的来说,C#中对list列表进行随机排序的方法主要依赖于随机数生成器,通过生成随机索引并插入元素,可以轻松实现列表的随机化。这种技巧在各种场景中都很有用,比如模拟随机事件、游戏中的随机生成等。希望这个方法...
本文将详细讨论如何对包含对象的`List`进行排序,包括正序和倒序,以及如何按指定参数排序。 首先,我们可以使用`Collections.sort()`方法对`List`进行排序。这个方法适用于已经实现了`Comparable`接口的元素类型,...
通过对`List<T>`类的排序方法的学习,我们可以灵活地对不同类型的对象进行排序。通过自定义比较器,我们可以实现更复杂的排序逻辑。此外,`List<T>`还支持部分排序,进一步增强了排序功能的灵活性。理解并掌握这些...
在Java编程中,对List集合中的对象进行多属性排序是一项常见的任务。这通常涉及到自定义比较逻辑,以满足复杂的数据排序需求。在这个“java版本List中对象多属性排序.rar”压缩包中,我们可能找到了一个关于如何在...
在Java中,对List对象列表实现去重或取出及排序是一种常见的操作。下面将详细介绍相关的方法和实现。 1. 实体类重写equals和hashCode方法 在Java中,想要去重List对象列表,首先需要重写实体类的equals和hashCode...
当我们说“arraylist对象中的某个值排序”时,这通常指的是对ArrayList中的元素,而不是ArrayList本身进行排序。ArrayList不支持直接排序,但是我们可以通过调用Collections.sort()方法或者自定义Comparator来实现。...
在Java编程中,对List对象进行排序是一个常见的需求,尤其是在处理数据集合时。Java提供了一个便捷的方法`Collections.sort()`,可以直接对实现了`Comparable`接口的List进行排序。然而,当需要根据对象内部的某个...
JAVA像SQL一样对List对象集合进行排序 在本文中,我们将详细介绍如何使用JAVA像SQL一样对List对象集合进行排序。我们将通过五个部分,分别介绍字符串List排序、整数类型List排序、对象字段对对象List排序、使用...
对于多维度排序,我们通常需要对List中的对象属性进行排序。这可以通过`Comparator`的嵌套使用来实现,或者在Java 8及以上版本中,可以利用`Comparator.comparing()`方法链式调用来实现: ```java list.sort...
本篇文章将详细讲解如何在List中保存对象,并按照对象中的某一属性来对这些对象进行排序。同时,我们将提供一段源码示例,以帮助你更好地理解和实现这个功能。 首先,我们要明白,列表(List)是Java集合框架中的一个...
本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下: Python版本: python3.+ 运行环境: Mac OS IDE: pycharm Python内建的排序方法 1 排序方法介绍 Python中有2个...
本篇将通过一个名为"List对象排序Demo"的主题,深入探讨如何对Python中的`List`对象进行排序,以及相关的一些源码分析和实用工具。 首先,Python的`List`对象提供两种主要的排序方式:`sort()`方法和`sorted()`函数...
当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...
`OrderBy` 方法是 LINQ(Language Integrated Query) 提供的一个非常方便的排序工具,它允许我们按照一种或多种字段对数据进行升序排序。在某些情况下,我们可能需要根据动态指定的字段进行排序,这在处理复杂数据...
在Java编程中,对List元素进行排序是一项常见的操作,特别是在处理数据集合时。本文将详细介绍如何在Java中对List元素进行排序,包括两种主要的方法:使用Comparable接口和Comparator接口。 1. **使用Comparable...
当需要对`List`中的对象进行自定义排序时,`Comparator`接口就派上了用场。`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`...
1. **自然排序**:如果 `List` 中的元素是实现了 `Comparable` 接口的对象,那么可以使用 `Collections.sort()` 方法进行自然排序。`Comparable` 接口定义了一个 `compareTo()` 方法,该方法用于比较对象之间的大小...