如何实现对ArrayList排序 sort
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现对ArrayList排序 sort相关的知识,希望对你有一定的参考价值。
package com.collection;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test
public static void main(String[] args)
Student zlj = new Student("丁晓宇", 21);
Student dxy = new Student("赵四", 22);
Student cjc = new Student("张三", 11);
Student lgc = new Student("刘武", 19);
List<Student> studentList = new ArrayList<Student>();
studentList.add(zlj);
studentList.add(dxy);
studentList.add(cjc);
studentList.add(lgc);
System.out.println("按年龄升序:");
Collections.sort(studentList, new SortByAge());
for (Student student : studentList)
System.out.println(student.getName() + " / " + student.getAge());
System.out.println();
System.out.println("按姓名排序:");
Collections.sort(studentList, new SortByName());
for (Student student : studentList)
System.out.println(student.getName() + " / " + student.getAge());
class SortByAge implements Comparator
public int compare(Object o1, Object o2)
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return s1.getAge().compareTo(s2.getAge());
// if (s1.getAge() > s2.getAge())
// return 1;
// return -1;
class SortByName implements Comparator
public int compare(Object o1, Object o2)
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return s1.getName().compareTo(s2.getName());
输出结果:
按年龄升序:
张三 / 11
刘武 / 19
丁晓宇 / 21
赵四 / 22
按姓名排序:
丁晓宇 / 21
刘武 / 19
张三 / 11
赵四 / 22 参考技术A 现在java8帮你封装了一把,可以不用Colltion的sort方法啦,很简单 list.stream.sorted(); 就可以直接排序啦,对于基本类型的数据 若是一个对象的集合,比如List list这类的集合
如何对 ArrayList 进行排序? [复制]
【中文标题】如何对 ArrayList 进行排序? [复制]【英文标题】:How to sort ArrayLists? [duplicate] 【发布时间】:2012-10-01 10:51:17 【问题描述】:我有一些列表包含 DataTime(Joda-time) 类型的元素。如何按日期对它们进行排序? 如果有人给出示例的链接,那就太好了...
【问题讨论】:
查看Collections.sort
和Comparator
。
@nkr 我想你的意思是比较器
提示:按时间戳排序。
@JordanKaye:糟糕,谢谢 :)
能把代码的大纲显示一下吗?
【参考方案1】:
因为你列表中的对象实现了Comparable
接口,所以可以使用
Collections.sort(list);
其中list
是您的ArrayList
。
相关的 Javadocs:
Collections
DateTime
Comparable
编辑:如果您想以类似的方式对包含DateTime
字段的自定义类列表进行排序,则必须自己实现Comparable
接口。例如,
public class Profile implements Comparable<Profile>
DateTime date;
double age;
int id;
...
@Override
public int compareTo(Profile other)
return date.compareTo(other.getDate()); // compare by date
现在,如果您有 List
的 Profile
实例,则可以使用与上述相同的方法,即 Collections.sort(list)
其中 list
是 Profile
s 的列表。
【讨论】:
如果 ArrayList 包含类 Profile public Profile DateTime date; 的对象怎么办?双倍年龄;内部标识; 如何按日期排序? Profile 是一个类,我自己写的【参考方案2】:DateTime
已经实现了 Comparable 你只需要使用Collections.sort()
【讨论】:
如果 ArrayList 包含类 Profile public Profile DateTime date; 的对象怎么办?双倍年龄;内部标识; 如何按日期排序? 这种情况下需要实现自定义比较器 @Stas0n 在我的帖子中查看编辑 你能展示一下代码的草图吗? ***.com/questions/5178092/…以上是关于如何实现对ArrayList排序 sort的主要内容,如果未能解决你的问题,请参考以下文章