2011-08-25 6 views
0

그래서 이상한 질문처럼 들릴지 모르지만 2 문자열 또는 바이트 [] (Arrays.equals() 사용)을 비교하는 것이 더 빠릅니까? 나는 Hadoop/Hbase로 작업하고 있는데, Hbase의 값으로 byte []를 얻었고, 전달 된 값을 가지고있다. String으로 변환하여 값을 변환하는 것이 더 빠를 것인가? 또는 바이트 배열을 비교해보십시오.문자열이나 바이트 배열을 비교하는 것이 더 빠릅니까?

+0

프로필/벤치 마크를 시도 했습니까? –

+0

아니요, 다른 사람들이 이미 비슷한 일을했을 수도 있기 때문에 여기에서 묻고 있습니다. Google을 통해 찾을 수없는 것 같습니다. – Drizzt321

+0

이 질문을 약간 정리해야합니다. 값이 문자열 또는 바이트 배열로 전달되며 해당 문자열 또는 동등한 바이트를 갖는 지점입니까? 바이트로 저장된 문자열 인 경우 정보 인코딩이 필요합니다. 모든 인코딩이 동일하다고하더라도 말입니다. – Clint

답변

2

실제로 이것을 테스트하지 않으면 Array.equals()가 귀하의 친구 인 것 같습니다. 문자열을 만들려면 String 생성자에서 바이트 배열의 복사본을 만들고, 유니 코드를 디코딩해야합니다. 유니 코드는 기본 유니 코드 인코딩 용 디코더를 만들고 바이트 배열을 char 배열로 변환 한 다음 문자열의 각 문자를 반복하는 등호를 수행해야합니다.

O() 유형 계산에서 문자로의 변환을 수행하기 위해 배열의 모든 바이트를 읽어야하므로 equals에 대해 String으로 변환하는 것이 더 복잡하다고 말하고 싶습니다.

업데이트 : 질문에 덧글이 추가되면 String이 주어지고 MapReduce 작업의 여러 결과와 비교하는 데 사용되는 것처럼 들립니다. 이 경우에는 입력 문자열을 바이트로 변환하고 여러 바이트 배열을 비교하는 것으로 보입니다. 이것은 입력 문자열을 남겨두고 작업에 반환 된 모든 바이트 배열을 변환하는 것보다 빠릅니다.

1

첫째, 두 문자열이 모두 동일한 인코딩인지 여부를 고려해야합니다. 그런 다음 같음 검사를 원할 경우 바이트 비교를 진행하십시오. 그러나 compareTo String 동작을 원한다면 어느 문자열이 더 크거나 작 으면 알 수있는 방법을 찾아야 할 수도 있습니다.이 경우 먼저 String으로 변환 한 후 비교하는 것이 좋습니다.

인코딩이 다르면 String을 작성한 다음 디코딩 부분을 String 클래스 자체에서 비교하는 것이 좋습니다.

+0

그래, 바이트 [] (Hbase의 Bytes.toByte() 사용)에서 같은 방식으로 인코딩되어 있고 compareTo() 기능이 필요하지 않고 그냥 equals()가 필요합니다. – Drizzt321

+0

그러면 바이트 비교를 진행합니다. 실제로 사용 Arrays.equals –

1

먼저, 정말로 중요한지 스스로에게 물어야합니다. HBase 및 네트워크 통신을 다루는 것을 감안할 때, 무엇이든지간에 시간이 많이 걸릴 수 있습니다. @Clint 및 @Suraj와 마찬가지로, 더 적은 메소드 호출 (즉, Array.equals() 사용)으로 더 나은 것으로 생각됩니다. 문자열을 같을 때 일어날 일을 생각한 다음 바이트 배열을 문자열로 변환하는 오버 헤드를 추가하십시오.

관련 문제