2014-07-15 1 views
1

는 다음과 같은 2 (종류의) 의사 코드 블록을 고려 (제 질문은 비록 자바에 특정) -더 집중적 인 - Modulo vs String <-> Int 변환?

//BLOCK 1 (using modulo) 
for(int i=0,i<N,i++){ //N is in the order of millions 
    int temp1 = a%10; 
    int temp2 = a/10; 
    // more code adding temp1 & temp2, etc. 
    } 

//BLOCK 2 (using int <-> char conversions) 
for(int i=0;i<N;i++) { //N is in the order of millions 
    if(a>9){ 
     String t1 = String.valueOf(a); 
     Integer temp1 = Integer.parseInt(t1.CharAt(0)); 
     Integer temp2 = Integer.parserInt(t2.CharAt(1)); 
    } 
    // more code adding temp1 & temp2, etc. 
} 

내 질문입니다 - 다른 동일하게 유지 모두에 TEMP1 & TEMP2을 얻는 두 가지 방법을 비교 위의 2 코드 블록.
어느 쪽이 더 집중적입니까? 나는 그것이 모듈이어야한다고 생각하지만 확실하지 않다. 문자열 < -> int < -> char 변환이 CPU를 많이 사용하지 않기 때문에 나는 믿습니다. 나는 완전히 틀릴 수 있고 그러므로 나는이 질문을 게시하고있다.

(PS. 당신의 대부분은 내가 1, 2 자리 숫자의 2 자리를 얻기 위해 노력하고 있어요 당신이 정확한지 추측 수 있습니다.)

+0

'Integer.parseInt (char)'? 나는 그렇게 생각하지 않는다; 하지만 한 문자 (예 : 16 진수 특수 문자)를 사용하면 조회 또는 전환이 더 빨라질 수 있습니다. – user2864740

답변

1

을 당신이 변환 찾을 수있을 거라 생각 정수로 문자열을 실제로 modulo (또는 나눗셈) 함수를 호출 어쨌든, 그래서 나는 문자열이 느린 것입니다 용의자. 그것은 당신이 원시 타입이 아닌 클래스로 작업하고 있다는 사실 위에 있습니다.

하지만 너는 측정해야 겠지? 측정 기능이 없으면 최적화 작업이 가장 적합합니다.

제안 된 각 솔루션을 1 천만 반복 루프 및 시간으로 시도해보십시오. 그것은 좋은 출발입니다.

+1

@ user2864740, 당신이 연결하는 코드는'parseInt'이며, string은 integer로 변환됩니다. 정수를 문자열로 변환 (반대 연산)하면 저렴한 연산이 아닌 모듈러스 (또는 나눗셈)를 사용합니다. OpenJDK에서, 그것은 'Integer.toString (int)'를 호출하는'String.valueOf (int)'에 의해 행해지 며,'Integer.getChars()'를 호출합니다.이 클래스는 a에서 (비트 시프 팅 및 뺄셈으로 에뮬레이트 된) 고리. – paxdiablo

+0

아, 작업 역 분개를 놓쳤습니다. – user2864740

0

짧은 답변 : int로 작업하기 때문에 모듈러스가 훨씬 빠릅니다.

긴 대답 : 블록 1은 프리미티브를 사용하고 블록 2는 오버 헤드를 추가하는 클래스를 사용합니다. 이것은 간단하지만 아직 CPU 사이클이 더 많이 필요합니다. Java의 프리미티브에 대해이 멋진 answer을 살펴볼 수 있습니다.

0

유일한 방법은 사용자 환경에서 테스트하는 것입니다.

+0

댓글이어야합니다. 관련 정보가 충분하지 않습니다. – user2864740