前几天雅虎的笔试题。今天看到了何海涛的blog,上面有写到。苦于不懂c++,看了半天他的代码还查了一下sprintf,才知道是什么意思。
其实大概的思路很简单【为什么当时想出来的办法是错的】。
就是说,设计一个比较规则,让两个字符串假设说是m和n,如果组成的数字mn>nm,那么就返回nm,否则返回mn。
可以用字符串的比较顺序来代替数字的比较顺序。那么,代码如下:
package yuesef;
import java.util.Arrays;
public class TT {
public static void main(String ss[]) {
MString s[] = new MString[3];
s[0] = new MString();
s[0].src = "32";
s[1] = new MString();
s[1].src = "321";
s[2] = new MString();
s[2].src = "324";
function(s);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i].src);
}
}
public static void function(MString s[]) {
Arrays.sort(s);
}
}
class MString implements Comparable<MString> {
@Override
public String toString() {
return "MString [src=" + src + "]";
}
String src;
@Override
public int compareTo(MString paramT) {
String s1 = this.src + paramT.src;
String s2 = paramT.src + this.src;
if (s1.compareTo(s2) == 0) {
return 0;
} else if (s1.compareTo(s2) > 0) {
return 1;
} else
return -1;
}
}
我在这里设计了一个MString来存储要比较的字符串,实现了compare函数。用来比较。
compare函数的意思是如果组成的数字mn>nm,那么就返回nm,否则返回mn。
---------------------------------
下面说一下Comparable接口。
实现该接口的话,需要实现comparaTo函数。这个函数是用于两个对象做比较的。如果相等则返回0,大则返回1,小则返回-1。
在上面的代码中,我们实现了Comparable接口并且在实现的函数中做了两个字符串的比较。
实现了Comparable接口的所有类都可以使用comparaTo函数来比较大小。