좋은 질문!
I asked the same thing a while back.
기본적으로, 속도/메모리 트레이드 오프입니다. 문자열 해시 코드 캐싱의 이점은 다른 모든 32 비트 메모리를 할당해야하는 모든 단일 문자열 객체의 오버 헤드 때문에 틀림없이 중요합니다. 이것은 프로그램에 존재할 수있는 많은 수의 문자열과 해시 코드가 신경 쓰는 번호 (아마도 키를 키로 사용하기 때문에)를 생각할 때 의미가 있습니다.
일부 프로그램에서는 후자의 숫자가 클 수도 있지만 상당히 적을 수도 있습니다. 많은 경우에 0 일 수도 있습니다.
성능은 특정 시나리오에서 당신을 위해 극단적 인 우려, 당신은 캐시에게 그것의 해시 코드 않습니다 자신의 래퍼 작성하는 것이 좋습니다했다 경우에,
public class StringKey
{
string value;
int hashCode;
public StringKey(string value)
{
this.value = value;
this.hashCode = value.GetHashCode();
}
public override int GetHashCode()
{
return this.hashCode;
}
public override string ToString()
{
return this.value;
}
// Plus all the other stuff you'd want to include here,
// e.g., Equals, CompareTo, etc.
}
이 될 수있는 모든 혜택을받을하기를 물론,이 모든 것들을 기본적으로 모든 곳에서 재사용 할 때 조심해야합니다. 대다수의 경우, 이것은 노력할만한 가치가 없을 것입니다. 예외적 인 경우라면 고려해야 할 부분으로 만 아이디어를 포함 시켰습니다.
약간의 복잡성과 4 바이트의 메모리를 제외하고는 아무 것도 없습니다. – CodesInChaos
나는이 질문이 오늘까지 남지 않기에는 너무 좋다고 느꼈다. 불행히도, 나는 그것을 쓰는 동안 결코 나타나지 않았습니다 ... 나는 방금 이것을 닫으려고 투표했습니다. – Humberto