4

ランダムな IP アドレスを生成するクラスがあります。このリストを並べ替える必要がありますが、独自のロジックを使用して 2 つの文字列を比較する必要があります。

私が好む方法は、クラスcompareTo内のメソッドをオーバーライドしてメソッドを使用することですが、これが可能かどうかはわかりません。StringArrays.sort()

以前にメソッドをオーバーライドしましたcompareToが、常に同じクラスのインスタンス変数を比較するだけでした。

/* Sorts array in ascending order
 *
 * @param    ips     An array of IP Addresses
 * @return           A sorted array of IP Addresses
 */
 public String[] sort(String[] ips)
 {
     String[] arr = ips;

     Arrays.sort(arr);

     return arr;
 }

これを行う他の方法があることは知っていますが、これはよりエレガントだと思います。同意できない場合は、遠慮なくお知らせください。コーディングの仕方だけでなく、上手にコーディングする方法も学ぼうとしています。

4

5 に答える 5

21

compareToクラスは final であるため、String のメソッドをオーバーライドすることはできません。ただし、カスタム Comparator を に提供できますArrays#sort()

于 2012-09-10T16:55:25.010 に答える
8

これではあなたの質問に思い通りに答えられないことは承知していますが、クラスではなくIPアドレスStringクラスが必要なように思えます。それ以外の場合、ソリューションは文字列で入力されます。

于 2012-09-10T16:58:42.177 に答える
4

それはできません。文字列は最終です。それをオーバーライドすることはありません。

独自のcompareToを実装してロジックを実行するのはあなたのクラスです。

すべてをカスタム クラスにカプセル化するか、カスタム Comparator を実装することができます。

オブジェクトについて十分に考えていないというクラスの罪を犯しているように聞こえます。文字列プリミティブは、このようなカスタム ロジックの最適なカプセル化ではありません。自分で考案した 1 つのオブジェクトにすべてを格納するのが最善です。

于 2012-09-10T16:55:07.787 に答える
2

クラスArraysで以下のメソッドを使用してみることができます。

public static void sort(T [] a、Comparator c);

例えば

Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                            // provide your comparison logic here
                return 0;
            }
        });
于 2012-09-10T17:00:10.193 に答える
0

Comparable インターフェイスを実装し、compareTO(Object) メソッドを実装する必要があります。

class IP implements Comparable<IP>{
    String ip;
    IP(String ip){
         this.ip=ip
       }

    String getIP(String ip){
    return ip;

    }

public int compareTo(IP){
return ip.compareTo(ip.getIP());
}

}

Collection.sort(object_ip) を呼び出して、IP クラスのオブジェクトを渡すことができるようになりました。

于 2012-09-10T17:21:19.417 に答える