不良代码展示-Android排序的实现
2011-09-29 10:49
260 查看
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6833067
不良代码:
首先,这里有个BUG。最小数值初始化赋的是999999,如果数组里面的数都比999999大,那么排序将不会进行。
我们可以把999999 改成 Integer.MAX_VALUE,就不会有这个问题了。
其次,只是对一个数组进行排序,是不需要自己来写的。Arrays里面,有排序的函数。程序可以改成:
那么,如果要排序的不是整数,而是一个对象怎么办?
例如,我们有个类:
我们现在需要对这个类的一个数组进行排序。能不能使用系统的排序函数呢。当然是可以的。
首先,我们的类要实现接口:Comparable。也就是,这个对象必须是可以比较的。
其次,我们要实现这个接口所定义的函数:compareTo。
修改后的类如下:
排序的代码如下:
在compareTo函数里,一般都是自己的对象所对应的值,减去需要比较的对象所对应的值。如果compareTo返回负数,则表示当前对象小于传入的参数。
不良代码:
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; } @Override public int compareTo(Object o) { Point other = (Point) o; return getMix() - other.getMix(); } @Override public 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返回负数,则表示当前对象小于传入的参数。
相关文章推荐
- 不良代码展示-Android画面UI中的线程约束
- Android 实现文件夹排序功能的实例代码
- 不良代码展示-Android中List和数组的例子(一)
- 不良代码展示-Android中List和数组的例子(二)
- 【Android】0行代码实现任意形状图片展示--android-anyshape
- 0行代码实现任意形状图片展示--android-anyshape
- [Android开发] 在项目中快速实现 列表字母排序滑动索引 功能原理以及过程代码
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
- 不良代码展示-Android中的位运算的例子(二)
- Android使用代码实现关机/重启
- Android定时器Timer的停止和重启实现代码
- Android轻松实现代码混淆
- Android应用中实现拖拽排序及添加阴影的方式
- Android文件下载功能实现代码
- Android 判断SIM卡属于哪个移动运营商的实现代码
- 代码实现获取android手机定位
- 【Android 基础】Animation 动画介绍和实现【帧动画和Tween动画【在代码和xml中实现】】
- Android 最流行的吸顶效果的实现及代码
- ASP.NET2.0中GRIDVIEW控件完全代码实现模版列排序!
- Android应用自动更新功能的代码实现