書くほうがいいですか
int primitive1 = 3, primitive2 = 4;
Integer a = new Integer(primitive1);
Integer b = new Integer(primitive2);
int compare = a.compareTo(b);
または
int primitive1 = 3, primitive2 = 4;
int compare = (primitive1 > primitive2) ? 1 : 0;
if(compare == 0){
compare = (primitive1 == primitive2) ? 0 : -1;
}
2番目の方が優れていると思います。より高速で、より多くのメモリを最適化する必要があります。しかし、それらは同等ではありませんか?
パフォーマンスを向上させるには、通常、コードをできる限りシンプルかつ明確にすることが最善であり、これは多くの場合うまく機能します(JITがこのコードを最適化するため)。あなたの場合、最も単純な例も最速です。
私はどちらかをします
int cmp = a > b ? +1 : a < b ? -1 : 0;
またはより長いバージョン
int cmp;
if (a > b)
cmp = +1;
else if (a < b)
cmp = -1;
else
cmp = 0;
または
int cmp = Integer.compare(a, b); // in Java 7
int cmp = Double.compare(a, b); // before Java 7
必要がない場合は、オブジェクトを作成しないことをお勧めします。
パフォーマンスに関しては、最初のものが最適です。
オーバーフローが発生しないことが確実にわかっている場合は、使用できます
int cmp = a - b; // if you know there wont be an overflow.
これより速くなることはありません。
Integer.compare(int, int)
を使用します。また、パフォーマンスの問題があることを証明できる場合を除き、コードを微最適化しないでください。
第三を提案してもいいですか
((Integer) a).compareTo(b)
IntプリミティブをIntegerオブジェクトにラップするとメモリがいくらか消費されますが、その違いは非常にまれな(メモリ要求)場合(1000以上の要素を持つ配列)でのみ顕著です。この方法で新しいInteger(int a)コンストラクターを使用することはお勧めしません。これで十分です:
Integer a = 3;
比較については、Math.signum(double d)があります。
compare= (int) Math.signum(a-b);
彼らはすでにintです。単に減算を使用しないのはなぜですか?
compare = a - b;
Integer.compareTo()は、必ずしも-1、0、または1のみを返すわけではないことに注意してください。
1.7より前の場合、Integer.compare(x、y)と同等のものは次のようになります。
Integer.valueOf(x).compareTo(y);
Java 8を使用している場合、次の方法でコンパレータを作成できます。
Comparator.comparingInt(i -> i);
逆順と比較したい場合:
Comparator.comparingInt(i -> -i);
論理値だけが必要な場合(ほとんどの場合)、次の1行のライナーが役立ちます。
boolean ifIntsEqual = !((Math.max(a,b) - Math.min(a, b)) > 0);
そして、それはJava 1.5+でも、おそらく1.1でも動作します(私は持っていません)。 1.5-でテストできるなら教えてください。
これも行います:
boolean ifIntsEqual = !((Math.abs(a-b)) > 0);
次のようなビット操作を介してこれを行うことができます。
(~a - ~b) >>> 31 | -((a - b) >>> 31)
public static void main(String[] args)
{
int a = 107;
int b = 106;
check(a, b);
a = 106;
b = 106;
check(a, b);
a = 106;
b = 107;
check(a, b);
}
public static void check(int a, int b)
{
System.out.println((~a - ~b) >>> 31 | -((a - b) >>> 31));
}
出力:
1
0
-1