开发者

Is there a library to compare primitive type values?

I am implementing Comparable interface on a trivial class that wraps a single int member.

I can implement it this way:

    @Override
    public int compareT开发者_运维知识库o ( final MyType o )
    {
        return
            Integer.valueOf( this.intVal ).compareTo(
                Integer.valueOf( o.intVal )
            );
    }

But this (maybe) creates 2 totally unnecessary Integer objects.

Or I can go tried and true cut-and-paste approach from Integer class:

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

This is pretty efficient, but duplicates code unnecessary.

Is there a library that would implement this missing Integer ( and Double and Float ) method?

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


  • For int, write your own compare method (it requires at most three lines of code).
  • For double, use Double.compare (not to be confused with compareTo).
  • For float, use Float.compare.

The last two take primitive types and thus avoid boxing and unboxing. I can see an argument for Integer providing a similar compare method, but as things stand it doesn't.


In Java 7, static int compare for primitive types have been added to all primitive object wrapper classes, i.e there is now:

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...


Maybe, I'm missing something, but IMHO this is a weird question.

Is there a library that would implement this missing Integer ( and Double and Float ) method?

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

Well, I think this does the job:

public static int compare ( int v1, int v2 )
{
    if (v1 < v2) return -1;
    if (v1 > v2) return  1;
    return 0;
}


This solution is simple, but perhaps simplistic:

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

Note: @aix is correct! This approach will not work for arbitrary integers. It will work for always-positive integers though, for example auto generated database keys etc

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜