不良代碼展示-Android排序的實現

來源:互聯網
上載者:User

原創文章,如有轉載,請註明出處:http://blog.csdn.net/yihui823/article/details/6833067

不良代碼:

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裡面,有排序的函數。程式可以改成:

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();

那麼,如果要排序的不是整數,而是一個對象怎麼辦?

例如,我們有個類:

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

我們現在需要對這個類的一個數組進行排序。能不能使用系統的排序函數呢。當然是可以的。

首先,我們的類要實現介面:Comparable。也就是,這個對象必須是可以比較的。

其次,我們要實現這個介面所定義的函數:compareTo。

修改後的類如下:

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;}@Overridepublic int compareTo(Object o) {Point other = (Point) o;return getMix() - other.getMix();}@Overridepublic String toString() {return "(" + x + "," + y + ")";}}

排序的代碼如下:

//隨機產生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返回負數,則表示當前對象小於傳入的參數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.