一个对对象排序的面试题

记得以前面试的时候碰到过一个面试题,大致是这个意思:有个对象,姑且叫Dog吧,Dog有身高,现在按Dog的身高进行排序

 

今天突然想起来,其实这个面试题,从表面看靠的是排序,有数据结构的内容,再深点看,是看你有多少经验,这个可以用

接口Comparable或者Comparator来解决,再深一点的层次,是考你的设计模式,这个用到的就是策略模式。对多态的一个很好的理解。

 

接口
public interface Comparable {

	int compareTo(Object o);
}
 

首先是帮助类

@Override  (实现comparable接口,这个comparable是java自带的)
	public int compare(Object o1, Object o2) {
		int i1 = (Integer)o1;
		int i2 = (Integer)o2; 
		return (i1<i2?-1:(i1==i2?0:1));
	}

或者

public static void sort(Object[] objects){
		for (int i = objects.length; i > 0; i--) {
			for (int j = 0; j < i-1; j++) {
				if (((Comparable)objects[j]).compareTo((Comparable)objects[j+1]) == 1) {
					swap(objects,j ,j+1);
				}
			}
		}
	}
	
	private static void swap(Object[] objects, int i, int j) {
		Object temp;
		temp = objects[i];
		objects[i] = objects[j];
		objects[j] = temp;
	}
Dog类   重写compareTo方法
@Override
	public int compareTo(Object o) {
		Dog dog = (Dog) o;
		return (this.food < dog.food ?-1:(this.food == dog.food ?
				0:1));
	}
 一点见解,高手指点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值