java如何对ArrayList中对象按照该对象某属性排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何对ArrayList中对象按照该对象某属性排序相关的知识,希望对你有一定的参考价值。

public static void display (Collection c)
Iterator it = c.iterator ();
while (it.hasNext())
Object o = it.next();
System.out.println(o);



public static void main(String[] args)

Student stu1 = new Student (1,"zhangsan","male",18,"cs");
Student stu2 = new Student (2,"lisi","female",19,"cs");
Student stu3 = new Student (3,"wangwu","male",20,"cs");
Student stu4 = new Student (4,"zhaoliu","female",21,"cs");
Student stu5 = new Student (5,"xiaoming","male",22,"cs");

ArrayList<Student> List = new ArrayList<Student>();
List.add(stu1);
List.add(stu2);
List.add(stu3);
List.add(stu4);
List.add(stu5);
display(List);
熬增加排序功能,打印时:输出学生对象的时候,需要先按照年龄排序,如果年龄相同,则按照姓名排序,如果姓名也相同,则按照学号排序。
这个怎么实现的,请大虾们帮下忙!谢谢!

有几个方法可以实现:让 Student 实现Comparable接口,或是实例化一个比较器,

现在用 Comparator 比较器实例来做一个:ComparableTest.java

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

public class ComparableTest
public static void main(String[] args)
Comparator<Student> comparator = new Comparator<Student>()
public int compare(Student s1, Student s2)
//先排年龄
if(s1.age!=s2.age)
return s1.age-s2.age;

else
//年龄相同则按姓名排序
if(!s1.name.equals(s2.name))
return s1.name.compareTo(s2.name);

else
//姓名也相同则按学号排序
return s1.id-s2.id;



;
Student stu1 = new Student (1,"zhangsan","male",28,"cs");
Student stu2 = new Student (2,"lisi","female",19,"cs");
Student stu3 = new Student (3,"wangwu","male",22,"cs");
Student stu4 = new Student (4,"zhaoliu","female",17,"cs");
Student stu5 = new Student (5,"jiaoming","male",22,"cs");

ArrayList<Student> List = new ArrayList<Student>();
List.add(stu1);
List.add(stu2);
List.add(stu3);
List.add(stu4);
List.add(stu5);
//这里就会自动根据规则进行排序
Collections.sort(List,comparator);
display(List);


static void display(ArrayList<Student> lst)
for(Student s:lst)
System.out.println(s);



class Student
int age;
int id;
String gender;
String name;
String cs;
Student(int id,String name,String gender,int age,String cs)
this.age=age;
this.name=name;
this.gender=gender;
this.id=id;
this.cs=cs;

public String toString()
return id+" "+name+" "+gender+" "+age+" "+cs;

参考技术A 修改你的 Student class,添加 Comparable 接口,重写 compareTo 方法。然后你可以用 TreeSet 结构进行排序。它会自动排序。 参考技术B 这只是一个做过的例子,我最近很忙,只能提示你一下,相信你能弄出来的,
方法:重写方法 equals,就是在你定义的类里面加上下面的方法,但内容肯定不同啦。下面是一个例子你看一下就ok了。。。呵呵记得给分啦
。一定记住要重写equals方法,还有类要是想接口 compareable一个并不能少。今天晚了明天我吧完整的我的程序给你吧

Java中如何把一组对象按照其某一个属性值进行排序?详见补充:

我有一个List<Operation> ops,其中每一个Operation对象都含有一个int的属性叫startTime, 请问如何按照startTime的值对ops里面的对象进行从小到大的重新排序?

参考技术A 很高兴回答你的为问题:
首先,你写个专用的比较器,如下:
public class ComparatorImpl implements Comparator<Student>
public int compare(Student s1,Student s2)
int age1 = s1.getAge();
int age2 = s2.getAge();
if(age1>age2)
return 1;
else if(age1<age2)
return -1;
else
return 0;



你只需把其中的Student换成Operation,把属性age换成startTime,即可
2)最后你在排序的时候按照下边的代码:
Comparator comp = new ComparatorImpl();
Collections.sort(ops, comp);

这样即可实现按照你所说的int属性排序;

这是实现Comparator接口进行排序,还有一种是需要你的Operation实现Comparable接口重写compareTo方法进行排序,详细你看下API,如果仍有疑问请Hi我,谢谢!本回答被提问者采纳
参考技术B 12生肖的排列顺序 参考技术C public static void main(String[] args)
test();


public static void test()
List<String> list = new ArrayList<String>();
list.add("6");
list.add("5");
list.add("");
list.add("3");
list.add("1");
list.add("2");
list.add("4");

Collections.sort(list);

System.out.println(list);
追问

我的list里面是Operation类的对象,不是string。Operation类有个int属性叫startTime,我要用startTime的值对list排序。

参考资料:http://www.netxk.cn

以上是关于java如何对ArrayList中对象按照该对象某属性排序的主要内容,如果未能解决你的问题,请参考以下文章

java arraylist 按照对象的属性排序

java中list集合对象按照某一个属性分组

Java求助:如何判断某对象是不是存在?如果不存在,创建该对象

Java中如何把一组对象按照其某一个属性值进行排序?详见补充:

Java中如何对集合排序

Java中List对象集合按照对象某一属性字段排序