프리미티브와 비교-> 정수 / 정수
쓰는 것이 더 낫습니까?
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;
}
두 번째가 더 좋고 더 빠르고 더 많은 메모리를 최적화해야한다고 생각합니다. 그러나 그들은 동등하지 않습니까?
성능을 위해 일반적으로 코드를 가능한 한 간단하고 명확하게 만드는 것이 가장 좋으며 이는 종종 잘 수행됩니다 (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)
. 성능 문제가 있음을 증명할 수 없다면 코드를 마이크로 최적화하려고하지 마십시오.
1/3을 제안해도 될까요
((Integer) a).compareTo(b)
int 프리미티브를 Integer 객체로 래핑하면 약간의 메모리 비용이 들지만 매우 드문 경우 (메모리 요구 사항) (1000 개 이상의 요소가있는 배열)에서만 차이가 큽니다. 이런 식으로 new Integer (int a) 생성자를 사용하지 않는 것이 좋습니다. 이것으로 충분합니다.
Integer a = 3;
비교에 대해서는 Math.signum (double d)이 있습니다.
compare= (int) Math.signum(a-b);
그들은 이미 정수입니다. 왜 빼기를 사용하지 않습니까?
compare = a - b;
Integer.compareTo ()가 반드시 -1, 0 또는 1 만 반환하는 것은 아닙니다.
1.7 이전의 경우 Integer.compare (x, y)에 해당하는 것은 다음과 같습니다.
Integer.valueOf(x).compareTo(y);
Java 8을 사용하는 경우 다음 방법으로 Comparator를 만들 수 있습니다.
Comparator.comparingInt(i -> i);
역순으로 비교하려면 :
Comparator.comparingInt(i -> -i);
다음과 같이 비트 조작을 통해이를 수행 할 수 있습니다.
(~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
논리적 인 값만 필요하다면 (거의 항상 그렇듯이) 다음 한 줄이 도움이 될 것입니다.
boolean ifIntsEqual = !((Math.max(a,b) - Math.min(a, b)) > 0);
And it works even in Java 1.5+, maybe even in 1.1 (i don't have one). Please tell us, if you can test it in 1.5-.
This one will do too:
boolean ifIntsEqual = !((Math.abs(a-b)) > 0);
참고URL : https://stackoverflow.com/questions/9150446/compareto-with-primitives-integer-int
'IT Share you' 카테고리의 다른 글
React Native Android 개발 모드에서 가로 모드를 비활성화하는 방법은 무엇입니까? (0) | 2020.11.25 |
---|---|
이름으로 여러 열 이름 바꾸기 (0) | 2020.11.25 |
프로젝트별로 Xcode에서 __MyCompanyName__을 정의 하시겠습니까? (0) | 2020.11.25 |
UICollectionView : 선택시 셀 크기 변경 애니메이션 (0) | 2020.11.25 |
Swift에서 HTML을 일반 텍스트로 변환 (0) | 2020.11.25 |