2014-07-23 4 views
1

그래서 바퀴를 새롭게 개조하고 Color 클래스를 작성했습니다.어느 것이 더 효율적입니까?

나는 색상의 빨강, 초록, 파랑 ​​및 알파 값을 설정하는 세터 메소드가 있습니다. 그러나 색이 int으로 저장되었으므로이 작업을 올바르게 수행하려면 몇 가지 연산을 수행해야합니다. 도중에 내가 더 효율적입니다 다음 중 궁금해하기 시작의 : 기본적으로 나는, 기존의 색상 값을 복용 이전 빨강/녹색/청색 성분을 뺀 새로운 하나를 추가하고

public void setR(int r) { 
    color = color - (color & 0xFF) + r; 
} 

public void setG(int g) { 
    color = color - ((color >> 8) & 0xFF) + (g << 8); 
} 

public void setB(int b) { 
    color = color - ((color >> 16) & 0xFF) + (b << 16); 
} 

public void setA(int a) { 
    color = color - ((color >> 24) & 0xFF) + (a << 24); 
} 

.... 내 두 번째 전략 : 나는 적색/녹색/파랑/알파 성분을 "빼기"를 선택한 다음 새로 추가 색상에 비트 단위 OR 연산을 수행하고

public void setR(int r) { 
    color = (color & 0xffffff00) + r; 
} 

public void setG(int g) { 
    color = (color & 0xffff00ff) + (g << 8); 
} 

public void setB(int b) { 
    color = (color & 0xff00ffff) + (b << 16); 
} 

public void setA(int a) { 
    color = (color & 0x00ffffff) + (a << 24); 
} 

....
나는 두 번째 방법이 더 효율적이라고 확신하지만 내가 틀렸다면 나를 교정 해주세요!

+1

차이점을 측정 할 수 있습니까? –

+0

말할 수는 없지만 테스트하기가 쉽습니다. – Philippe

+6

매우 적은 양의 효율성을 다룰 때 효율성보다 가독성을 높이는 것이 항상 바람직하다고 생각합니다. –

답변

9

나는 읽기 쉬운 것을 선택합니다. 나는이 수업의 실행 속도에 약간의 변화가있을지라도 최종 신청서에서 측정 가능한 모든 것에 영향을 줄지는 의심 스럽다.

귀하의 경우 RGBA 값을 클래스 내에 별도의 필드로 저장하는 것이 좋습니다. 필요할 때 정수로만 결합하십시오 (예 : 일부 getter 메소드). 그것은 가장 가독성 있고 유지 보수가 잘되는 옵션으로 나를 공격 할 것입니다.

0

JVM의 JIT 컴파일러는 이와 같은 최적화를 처리합니다. 그래서 그것은 정말로 중요하지 않습니다.

의심되는 경우 두 변종을 모두 프로파일 링하십시오.

관련 문제