compareTo与基元 – >整型/整型

写得好吗?

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; } 

我觉得第二个更好,应该更快,更多的内存优化。 但是他们不平等吗?

为了提高性能,通常最好尽可能使代码尽可能简单明了,而且这通常会performance良好(因为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 

最好不要创build一个对象,如果你不需要。

性能明智,第一是最好的。

如果你确定知道你不会得到溢出,你可以使用

 int cmp = a - b; // if you know there wont be an overflow. 

你不会比这更快。

使用Integer.compare(int, int) 。 除非您能certificate您有性能问题,否则不要尝试微观优化您的代码。

我可以提议三分之一吗?

 ((Integer) a).compareTo(b) 

将int原始值包装到Integer对象中会花费你一些内存,但是这种差异只会在非常less见的(内存需求)情况下(1000+元素的数组)出现。 我不会推荐这样使用新的Integer(int a)构造函数。 这就足够了:

 Integer a = 3; 

关于比较有Math.signum(double d)。

 compare= (int) Math.signum(ab); 

他们已经整合了 为什么不使用减法?

 compare = a - b; 

请注意,Integer.compareTo()不一定只返回-1,0或1。

对于前1.7我会说一个相当于Integer.compare(x,y)是:

 Integer.valueOf(x).compareTo(y); 

你可以通过位操作来完成,如下所示:

 (~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)); } 

OUTPUT:

 1 0 -1 

如果您使用的是Java 8,则可以通过以下方法创build比较器:

 Comparator.comparingInt(i -> i); 

如果你想比较倒序:

 Comparator.comparingInt(i -> -i);