赞
踩
Java中本身自带对ArrayList中的元素进行排序的函数sort()。然而,如果想对元素进行自定义排序,需要重载Compare方法!下面举两个实例介绍如何进行自定义排序。
一、元素类型是string,按照string的某一个段进行排序
ArrayList<String>中的元素是三个string“拼接”而成。比如1111\t2\t1,想按照
最后一段对应的数字进行升序排列。重载Comparator如下:
Comparator<String> comparator = new Comparator<String>() {
public int compare(String o1, String o2) {
String s1 = o1.split("\t")[2];
String s2 = o2.split("\t")[2];
return Integer.valueOf(s1) - Integer.valueOf(s2); //升序
//return Integer.valueOf(s2) - Integer.valueOf(s1); //降序
}
};
测试代码:
ArrayList<String> artStr = new ArrayList<String>();
artStr.add("1111\t2\t1");
artStr.add("1111\t2\t3");
artStr.add("1111\t2\t9");
artStr.add("1111\t2\t6");
artStr.add("1111\t2\t5");
artStr.add("1111\t2\t4");
artStr.add("1111\t2\t11");
artStr.add("1111\t6\t1");
artStr.add("1111\t2\t7");
artStr.add("1111\t2\t8");
artStr.add("1111\t9\t1");
Collections.sort(artStr, comparator);
二、元素类型是自定义类,按照自定义类的属性进行排序
重载Comparator如下:
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);
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;
}
}
注:二参考自http://wlh269.iteye.com/blog/1851296
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。