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