Jon Skeet의 답변 은 두 가지 시나리오 ( null
가치가 아닌 null
가치가있는 맵 )를 효율적으로 처리합니다.
숫자 입력 및 효율성 문제에 대해 무언가를 추가하고 싶습니다.
1.000 개의 항목이있는 HashMap이 있고 효율성을 개선하려고합니다. HashMap에 매우 자주 액세스하는 경우 모든 액세스에서 키가 있는지 확인하면 오버 헤드가 커집니다.
항목이 1.000 인지도는 큰지도가 아닙니다.
5.000 또는 10.000 개의 항목이있는지도
Map
이러한 치수로 빠른 검색을 수행하도록 설계되었습니다.
이제는 hashCode()
맵 키의 분포가 양호 하다고 가정합니다 .
Integer
키 유형으로 사용할 수있는 경우 수행하십시오. 고유 한 값에 대해서는 충돌이 불가능하기
때문에이 hashCode()
방법은 매우 효율적입니다 int
.
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
키의 경우 다른 내장과 같은 유형 사용할 필요가 String
종종 사용된다 예를 들어 Map
, 당신은 몇 가지 충돌이있을 수 있지만에서 개체의 일부 수천 1000에서 Map
는 AS 그것의 거의를, 당신이해야 String.hashCode()
하는 방법 좋은 분포를 제공합니다.
사용자 정의 유형을 사용하는 경우 재정의 hashCode()
하고 equals()
올바르게 재정의 하고 전체적으로 hashCode()
공정한 분포 를 제공하십시오.
9의 항목을 Java Effective
참조하십시오. 방법을 자세히 설명
하는 게시물 이 있습니다.