如何实现对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.sortComparator @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
    

现在,如果您有 ListProfile 实例,则可以使用与上述相同的方法,即 Collections.sort(list) 其中 listProfiles 的列表。

【讨论】:

如果 ArrayList 包含类 Profile public Profile DateTime date; 的对象怎么办?双倍年龄;内部标识; 如何按日期排序? Profile 是一个类,我自己写的【参考方案2】:

DateTime 已经实现了 Comparable 你只需要使用Collections.sort()

【讨论】:

如果 ArrayList 包含类 Profile public Profile DateTime date; 的对象怎么办?双倍年龄;内部标识; 如何按日期排序? 这种情况下需要实现自定义比较器 @Stas0n 在我的帖子中查看编辑 你能展示一下代码的草图吗? ***.com/questions/5178092/…

以上是关于如何实现对ArrayList排序 sort的主要内容,如果未能解决你的问题,请参考以下文章

如何对List集合中的对象进行排序?

如何按字典顺序对 ArrayList 进行排序?

C# 集合及集合内排序 问题 速求

如何对Scala中集合进行排序?

如何按降序对 ArrayList<Long> 进行排序?

Java:如何按大小对多个 ArrayList 进行排序?