sort()与Comparable接口

sort()一般用于 对象 数组或者List类(Set不可)排序,需要类实现Comparable接口

void static sort(List list)
根据元素的自然顺序 对指定列表按升序进行排序
是属于Collections类的一个静态方法,也就是说可以这样调用:
int[] a={.....};
Collections.sort(a);
或者:
ArrayList a=new ArrayList(1,2,3,4....);
Collections.sort(a);

Arrays.sort(a); 用于数组
Collections.sort(a); 用于容器

compareTo的约定是:
  将当前这个对象与指定的对象进行顺序比较,当该对象小于、等于或大于指定对象时,分别返回一个负整数、0或正整数,如果无法进行比较,则抛出ClassCastException异常。

 

import java.util.*;  
public class EmployeeSortTest {  
  
  
public static void main(String[] args) {  
// TODO Auto-generated method stub  
Employee[] staff = new Employee[3];  
staff[0] = new Employee("harry Hacker",35000);  
staff[1] = new Employee("carl cracke",75000);  
staff[2] = new Employee("tony Tester",38000);  
  
Arrays.sort(staff);//sort方法可以实现对对象数组排序,但是必须实现 Comparable接口  
  
for(Employee e: staff)  
System.out.println("id="+e.getId()+" name="+e.getName()+  
".salary="+e.getSalary());  
}  
  
}  
  
class Employee implements Comparable<Employee>  
{  
public Employee(String n,double s)  
{  
name = n;  
salary = s;  
Random ID = new Random();  
id = ID.nextInt(10000000);  
}  
public int getId()  
{  
return id;  
}  
public String getName()  
{  
return name;  
}  
  
public double getSalary()  
{  
return salary;  
}  
  
public void raiseSalary(double byPercent)  
{  
double raise = salary *byPercent/100;  
salary+=raise;  
}  
  
public int compareTo(Employee other)  
{  
if(id<other.id)//这里比较的是什么 sort方法实现的就是按照此比较的东西从小到大排列  
return -1;  
if(id>other.id)  
return 1;  
return 0;  
}  
private int id;  
private String name;  
private double salary;  
}  

 

posted on 2014-09-20 12:43  平庸  阅读(206)  评论(0编辑  收藏  举报

导航