当前位置:操作系统 > 安卓/Android >>

Android排序的实现- 给新手

不良代码:

view plain
int[] iArray = {12,122,123,124,1,}; 
 
//对iArray排序 
int iMin = 999999; 
int indexMin = 0; 
int iTmp = 0; 
for(int i = 0;i < iArray.length;i++) { 
    //找到最小的 
    for(int j = i; j < iArray.length; j++) { 
        if (iMin > iArray[j]) { 
            iMin = iArray[j]; 
            indexMin = j; 
        } 
    } 
    //放在最前面 
    iTmp = iArray[i]; 
    iArray[i] = iArray[indexMin]; 
    iArray[indexMin] = iTmp; 

 
for(int i = 0;i < iArray.length;i++) { 
    System.out.print(iArray[i] + ","); 

System.out.println(); 

首先,这里有个BUG。最小数值初始化赋的是999999,如果数组里面的数都比999999大,那么排序将不会进行。

我们可以把999999 改成 Integer.MAX_VALUE,就不会有这个问题了。

其次,只是对一个数组进行排序,是不需要自己来写的。Arrays里面,有排序的函数。程序可以改成:


view plain
int[] iArray = {12,122,123,124,1,}; 
 
//对iArray排序 
Arrays.sort(iArray); 
 
for(int i = 0;i < iArray.length;i++) { 
    System.out.print(iArray[i] + ","); 

System.out.println(); 

那么,如果要排序的不是整数,而是一个对象怎么办?

例如,我们有个类:

view plain
public class Point { 
    private int x; 
    private int y; 
    public Point(int x, int y) { 
        this.x = x; 
        this.y = y; 
    } 

我们现在需要对这个类的一个数组进行排序。能不能使用系统的排序函数呢。当然是可以的。

首先,我们的类要实现接口:Comparable。也就是,这个对象必须是可以比较的。

其次,我们要实现这个接口所定义的函数:compareTo。

修改后的类如下:

view plain
public class Point implements Comparable { 
    private int x; 
    private int y; 
    public Point(int x, int y) { 
        this.x = x; 
        this.y = y; 
    } 
     
    private int getMix() { 
        return (x << 8) + y; 
    } 
     
    @Override 
    public int compareTo(Object o) { 
        Point other = (Point) o; 
        return getMix() - other.getMix(); 
    } 
     
    @Override 
    public String toString() { 
        return "(" + x + "," + y + ")"; 
    } 

排序的代码如下:

view plain
//随机生成5个对象 
Random random = new Random(); 
List<Point> lst = new ArrayList<Point>(); 
for(int i = 0; i < 5; i ++) { 
    lst.add(new Point(random.nextInt(100), random.nextInt(100))); 

Point[] pArray = lst.toArray(new Point[lst.size()]); 
 
//对Point数组进行排序 
Arrays.sort(pArray); 
 
for(int i = 0;i < pArray.length;i++) { 
    System.out.print(pArray[i] + ","); 

System.out.println(); 

    在compareTo函数里,一般都是自己的对象所对应的值,减去需要比较的对象所对应的值。如果compareTo返回负数,则表示当前对象小于传入的参数。

作者“yihui823的专栏”

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,