配列を最小にする数とJavaのComparableインタフェース
1573 ワード
先日ヤフーの筆記試験問題.今日は何海濤のblogを見て、書いてありました.c++が分からないのに苦労して、半日彼のコードを見てsprintfを調べて、やっとどういう意味か知った.
実は大まかな考え方は簡単で、「なぜその時思いついた方法が間違っていたのか」.
すなわち,2つの文字列がmとnであると仮定し,構成された数値mn>nmであればnmを返し,そうでなければmnを返す比較規則を設計した.
数値の比較順序の代わりに文字列の比較順序を使用できます.では、コードは次のとおりです.
比較する文字列を格納するためにMStringを設計し,compare関数を実現した.比較に使用します.
compare関数は,構成された数値mn>nmであればnmを返し,そうでなければmnを返すことを意味する.
---------------------------------
次にComparableインタフェースについてお話しします.
このインタフェースを実現するにはcomparaTo関数を実現する必要がある.この関数は2つのオブジェクトを比較するために使用されます.等しい場合は0、大きい場合は1、小さい場合は-1を返します.
上記のコードでは,Comparableインタフェースを実装し,実装した関数で2つの文字列の比較を行った.
Comparableインタフェースを実装したすべてのクラスはcomparaTo関数を使用してサイズを比較できます.
実は大まかな考え方は簡単で、「なぜその時思いついた方法が間違っていたのか」.
すなわち,2つの文字列が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関数を実現する必要がある.この関数は2つのオブジェクトを比較するために使用されます.等しい場合は0、大きい場合は1、小さい場合は-1を返します.
上記のコードでは,Comparableインタフェースを実装し,実装した関数で2つの文字列の比較を行った.
Comparableインタフェースを実装したすべてのクラスはcomparaTo関数を使用してサイズを比較できます.