JAVA应用 之 排序(一)

2014-11-24 11:44:55 · 作者: · 浏览: 16
概述:
1.本文阐述对List(Array乱入)的排序问题。
2.Set和Map的排序 可使用TreeSet、TreeMap,见本博客的相关文章(下面提供连接)。
3.想对一个List进行排序有2种方法(数组也适用):
方法一:实现一个比较器Comparator。
方法二:List中的对象实现Comparable接口的compareTo方法。
4.完成上面一点后,集合使用Collections.sort,数组使用Arrays.sort进行排序。
[java]
package com.cxy.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author cxy
*/
public class ListSortTest
{
public static void main(String[] args)
{
List l=new ArrayList();
Student s1 =new Student("小明",76);
Student s2 =new Student("小黑",99);
Student s3 =new Student("小白",60);
l.add(s1);
l.add(s2);
l.add(s3);
System.out.print("List排序前:");
System.out.println(l);
//第一种方式:普通的对象,然后实现一个比较器,使用下面的方法进行排序
Collections.sort(l,new StudentComparator());
System.out.print("List排序后:");
System.out.println(l);
System.out.println("=======================");
//乱入的数组
Student[] sa={s1,s2,s3};
System.out.print("数组排序前:");
System.out.println(sa[0].toString()+sa[1]+sa[2]);
Arrays.sort(sa,new StudentComparator());
System.out.print("数组排序后:");
System.out.println(sa[0].toString()+sa[1]+sa[2]);
System.out.println("============下面的都是ComparableStudent演示===========");
//对象自身拥有排序能力
List l1=new ArrayList();
ComparableStudent s11 =new ComparableStudent("较劲的小明",76);
ComparableStudent s22 =new ComparableStudent("较劲的小黑",99);
ComparableStudent s33 =new ComparableStudent("较劲的小白",60);
//PS:较劲的意思可以理解为 争强好胜 o_o
l1.add(s11);
l1.add(s22);
l1.add(s33);
System.out.print("List排序前:");
System.out.println(l1);
Collections.sort(l1);
System.out.print("List排序后:");
System.out.println(l1);
System.out.println("=======================");
//数组再次乱入
ComparableStudent[] cs={s11,s22,s33};
System.out.print("数组排序前:");
System.out.println(cs[0].toString()+cs[1]+cs[2]);
Arrays.sort(cs);
System.out.print("数组排序后:");
System.out.println(cs[0].toString()+cs[1]+cs[2]);
}
}
//一个普通的学生类,按照学生的学习成绩进行排序
//这里只是为了快速展示排序而设计的“简陋”的类,所以不要追究 你这个类设计的不科学,成员变量应该私有等问题。
class Student
{
public String name; //姓名
public int score; //分数
Student(String name,int score)
{
this.name=name;
this.score=score;
}
@Override
public String toString()
{
return "["+name+":"+score+"]";
}
}
//一个学生的比较器,泛型定义了比较的范围是Student,也可以不定义泛型,再在compare里面进行强制转换
class StudentComparator implements Comparator
{
@Override
public int compare(Student s1, Student s2)
{
if(s1.score>s2.score) return 1;
else if(s1.score
else return 0;
}
}
/**
* 一个实现了Comparable接口的compareTo方法的学生类
* comp