在java.util中有Collections类,包含可以操作或返回集合的专用静态类,其中有两类sort方法;
注意:
java.util.Arrays中也有用于数组比较的多种sort类
1、第一类sort的API解释:
public static <T extends Comparable<? super T>> void sort(List<T> list)
- 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
-
list
- 要排序的列表。 -
c
- 确定列表顺序的比较器。 null 值指示应该使用的元素的 自然顺序。例子
根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现Comparable 接口。
参数:list
- 要排序的列表。
用法:
list类中的成员类必须实现Comparable接口,Comparable接口的唯一方法compareTo,重写compareTo方法对排序进行说明,
compareTo方法API说明:int compareTo(T o)
o
- 要比较的对象。
public class Main{
public static void main(String args[]){
ArrayList<Student> al=new ArrayList<Student>();
al.add(new Student(2,"aa"));
al.add(new Student(1,"bb"));
al.add(new Student(3,"dd"));
al.add(new Student(3,"cc"));
Collections.sort(al);
Iterator it=al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class Student implements Comparable{
int id;
String name;
Student(int id,String name){
this.id=id;
this.name=name;
}
public int compareTo(Object o){
Student s=(Student)o;
int result=(id>s.id)?1:((id==s.id)?0:-1);
if(0==result){ //String类有compareTo方法,在重写compareTo方法的时候用的比较字符的是String类的compareTo方法。
result=name.compareTo(s.name);
}
return result;
}
public String toString(){
return "id="+this.id+",name="+this.name;
}
}
//主函数直接调用Collections.sort(list);
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List list = new ArrayList();
//此处add user2再add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
2、第二类sort的API解释:
public static <T> void sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。
参数:
* 根据order对User排序
*/
public class User { //此处无需实现Comparable接口
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List list = new ArrayList();
list.add(user2);
list.add(user1);
Collections.sort(list,new Comparator(){
public int compare(User arg0, User arg1) { //String类有compareTo方法,在重写compareTo方法的时候用的比较字符的是String类的compareTo方法。
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
}