Java String hashCode()
1. 문자열 해시코드 계산
문자열 해시 코드 계산은 아래의 논리를 따른다.
1
int hashcode = s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];
s[i]
는 i번째 인덱스의 문자이다.^
지수화를 나타낸다.n은 문자열의 길이이다.
2. hashCode() 예제
String hashCode() 메서드의 예제이다.
- 예제
1
2
3
4
5
6
7
8
9
10
11
12
public class StringHashCode {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println("".hashCode());
}
}
- 결과
1
2
3
4
2301506
2301506
2301506
0
3. hashCode() 및 equals()
두 문자열에 대해
equals()
가 참이면, 그들의hashCode()
는 동일할 것이다.두 문자열
hashCode()
가 같다는 것은 두 문자열이 같다는 의미가 아니다.
문자열 문자가 해시코드를 계산하는데 사용되므로 첫 번째 문장은 항상 참이 된다. 위의 자바 예제 이를 확인할 수 있다.
두 번째 문장을 확인하기 위한 예제이다.
- 예제
1
2
3
4
5
6
7
8
9
10
11
public class StringHashCode {
public static void main(String[] args) {
String a = "Siblings";
String b = "Teheran";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(a.hashCode() == b.hashCode());
System.out.println(a.equals(b));
}
}
- 결과
1
2
3
4
231609873
231609873
true
false
4. 해시코드 충돌
두 문자열이 동일한 해시코드를 가질 때 이를 해시코드 충돌이라고 한다. 해시코드 충돌이 발생하는 경우가 많다.
예를 들어 “Aa”와 “BB”는 해시코드 값이 2112이다.
두 문자열이 동일한지 확인하기 위해 hashCode()
메서드에 의존해서는 안된다. 문자열 클래스는 Object 클래스에서 이 함수를 재정의 한다. 문자열이 get()
및 put()
작업의 맵 키로 사용될 때 Java 내부에서 사용된다.
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.