配列を最小にする数とJavaのComparableインタフェース

1573 ワード

先日ヤフーの筆記試験問題.今日は何海濤のblogを見て、書いてありました.c++が分からないのに苦労して、半日彼のコードを見てsprintfを調べて、やっとどういう意味か知った.
実は大まかな考え方は簡単で、「なぜその時思いついた方法が間違っていたのか」.
すなわち,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関数を使用してサイズを比較できます.