5

Comparable単一のintメンバーをラップする些細なクラスにインターフェースを実装しています。

私はそれをこのように実装することができます:

    @Override
    public int compareTo ( final MyType o )
    {
        return
            Integer.valueOf( this.intVal ).compareTo(
                Integer.valueOf( o.intVal )
            );
    }

しかし、これは(多分)2つのまったく不要な整数オブジェクトを作成します。

または、Integerクラスからの真のカットアンドペーストアプローチを試してみることができます。

    @Override
    public int compareTo ( final MyType o )
    {
      int thisVal = this.intValue;
      int anotherVal = o.intValue;
      return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
    }

これはかなり効率的ですが、コードを複製する必要はありません。

この欠落しているInteger(およびDoubleとFloat)メソ​​ッドを実装するライブラリはありますか?

   public static int compare ( int v1, int v2 );
4

4 に答える 4

6
  • についてintは、独自のcompareメソッドを記述します(最大で3行のコードが必要です)。
  • にはdouble、を使用しますDouble.compare(と混同しないでください compareTo)。
  • にはfloat、を使用しますFloat.compare

最後の2つはプリミティブ型を使用するため、ボックス化とボックス化解除を回避します。Integer同様の方法を提供することについての議論を見ることができますが、compare現状ではそうではありません。

于 2011-09-01T16:14:13.253 に答える
6

Java 7ではstatic int compare、プリミティブ型がすべてのプリミティブオブジェクトラッパークラスに追加されました。つまり、次のようになります。

java.lang.Integer: static int compare( int x, int y );
java.lang.Byte: static int compare( byte x, byte y );
java.lang.Short: static int compare( short x, short y );
etc...
于 2013-07-31T11:07:52.803 に答える
2

多分、私は何かが足りないのですが、私見これは奇妙な質問です。

この欠落しているInteger(およびDoubleとFloat)メソ​​ッドを実装するライブラリはありますか?

public static int compare ( int v1, int v2 );

まあ、私はこれが仕事をしていると思います:

public static int compare ( int v1, int v2 )
{
    if (v1 < v2) return -1;
    if (v1 > v2) return  1;
    return 0;
}
于 2011-09-01T16:10:20.417 に答える
-1

このソリューションは単純ですが、おそらく単純です。

public static int compare ( int v1, int v2 )
{
    return v1 - v2;
}

注:@aixは正しいです!このアプローチは、任意の整数では機能しません。ただし、自動生成されたデータベースキーなど、常に正の整数に対しては機能します。

于 2011-09-01T16:16:23.917 に答える