它拥有一个sort()方法
关于comparable待会再介绍,先用sort()实现简单的排序功能,下面这个案例是给Integer泛型的list排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* @author lune
*
* 通过Collections.sort()方法,对Integer泛型的List进行排序
* 对String泛型的List进行排序
*/
public class CollectionsTest {
/**
* 对Integer泛型的List进行排序
* 创建一个Integer泛型的List,插入十个100以内不重复的随机整数
*/
public void sortInterger(){
List integerList = new ArrayList();
Random random = new Random();
Integer integer;
for(int i = 0 ; i<10 ; i++){
do{
integer = random.nextInt(100);
}while(integerList.contains(integer)); //如果包含此整数,则重新生成
integerList.add(integer);
System.out.println("添加了整数"+integer);
}
System.out.println("--------------排序前---------------");
for(Integer in:integerList){
System.out.print(in+" ");
}
System.out.println("\n\n");
Collections.sort(integerList);
System.out.println("--------------排序后---------------");
for(Integer in:integerList){
System.out.print(in+" ");
}
}
public static void main(String[] args) {
new CollectionsTest().sortInterger();
}
}
在贴出一个小作业
下面贴出我自己的代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* @author lune
*
*/
public class SortDemo {
static List stringList;
/**
* 向stringList中添加十条长度在10以内的随机字符串
*/
public void test(){
stringList = new ArrayList();
Random random = new Random();
String str = null;
for(int i=0 ; i<10 ; i++){
int length = random.nextInt(10); //生成随机长度
do{
str = createRandomString(length);
}while(stringList.contains(str)); //若包含相同的字符串,则重新生成字符串
System.out.println("将要添加的字符串:"+str);
stringList.add(str);
}
System.out.println("--------------排序前---------------");
show();
Collections.sort(stringList);
System.out.println("--------------排序后---------------");
show();
}
/**
* 该方法生成一个长度为length随机字符串
*/
public String createRandomString(int length){
String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//根据base的长度获取随机数,将这个随机数作为base的下标
Random random = new Random();
StringBuffer sb = new StringBuffer();
for(int i=0 ; i
下面是运行结果:
到这里,大家是否觉得困惑,既然只是对Integer,String进行排序,那为什么不直接用一个数组,然后用Arrays工具类中的sort()方法直接排序呢?那么请思考这个问题,如果有一个Teacher类,含有id和name属性,那么如何根据id或者name对List排序,实际上可以看作是一个比较的过程,例如对整数排序,对大小比较,然后按一定顺序排列。那么对于Teacher对象,既有id,又有name.假如List
对于基本包装类以及String类型,都实现了Comparable接口.对于Integer,因为数值大小的不同,就可以说Integer是可以比较的.很显然,如果两个事物要进行排序,首先它们必须是可以比较的,而比较通常是指这两个事物在某一方面或者某几方面的特性可比较.
如果两个学生,升高不同,体重也不同,那么给他们进行排序时就必须说明,是按身高排序,还是按体重排序.
对于sort()排序的集合中的对象都必须实现Comparable接口.那么理所当然,如果要对Teacher泛型集合进行排序,Teacher类必须实现Comparable接口,相当于给对象指定了默认的排序规则,必须实现该接口的compareTo()方法,当两个实现了Comparable接口的类的实例进行比较时,就会调用compareTo()方法.
如果A对象compareTo B对象,返回正数表示A对象比B对象大,负数表示小,0表示相等.
public class Teacher implements Comparable{
public String id;
public String name;
public Teacher(String id , String name){
this.id = id;
this.name = name;
}
@Override
public int compareTo(Teacher o) {
return this.id.compareTo(o.id);
}
}
Comparableimport java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author lune
*
*/
public class SortTeacher {
public void test(){
List teachers = new ArrayList();
teachers.add(new Teacher("2", "wang"));
teachers.add(new Teacher("3", "cheng"));
teachers.add(new Teacher("1", "li"));
Collections.sort(teachers);
for(Teacher t:teachers){
System.out.println(t.id+t.name);
}
}
public static void main(String[] args) {
new SortTeacher().test();
}
}
大功告成,实际上还有一个Comparator接口,它定义的是临时比较规则,而不是默认比较规则.接口的实现类必须实现compare()方法.有兴趣的可以在API中学习一下.