不良代码展示-Android排序的实现

原创文章,如有转载,请注明出处: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;
	}
	
	@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返回负数,则表示当前对象小于传入的参数。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值