2017-02-04 1 views
0

무엇이 문제 일 수 있습니까? 나는 s1.hashCode 광고 s2.hashCode의 다른 값을 기대하지만, 그것들은 동일하다.String.hashCode 다른 시퀀스에 대해 동일한 값

다트 --version // 다트 VM 버전 : 1.21.1 "linux_x64"에 (금 1월 13일 9시 44분 1초 2017) 나는 DartPad에서이 코드를하려고하면

main() { 
    String s1 = "x-14-9"; 
    String s2 = "f-107"; 
    print(s1.hashCode); // 939886624 
    print(s2.hashCode); // 939886624 
    print("identical - ${identical(s1,s2)}"); // identical - false 
    print("== - ${s1 == s2}");     // == - false 
} 

을 - 모든 것입니다 음, 값이 다릅니다.

+0

는 "나는 s1.hashCode 광고 s2.hashCode의 다른 값을 기대"- 해시 코드는 실제로 그 약속을하지 않습니다. – user2357112

답변

2

많은 실제 프로그램에서 perfect hash functions은 존재하지 않습니다.

즉, 다른 개체가 (즉, Dart에서 hashCode)과 충돌 할 수 있음을 의미합니다. HashMap 같은 대부분의 구현은 충돌에 대한 동등성 검사를 사용하여 실패합니다.

당신은 표준 라이브러리를 사용할 때 이것에 대해 걱정할 필요가 없습니다 :

var map = new Map<String, int>(); 
map['x-14-9'] = 1; 
map['f-107'] = 2; 
print(map); // Should print both key-value pairs. 
+0

실제로 극단적으로, 특정 클래스의 모든 * 객체 *의 '.hashCode'가 모두 상수 인 경우 (* 비효율적이긴하지만) 프로그램이 여전히 * 작동 *해야합니다 42. –