File tree 1 file changed +10
-3
lines changed
src/data-structures/maps/hash-maps
1 file changed +10
-3
lines changed Original file line number Diff line number Diff line change 2
2
const LinkedList = require ( '../../linked-lists/linked-list' ) ;
3
3
const { nextPrime } = require ( './primes' ) ;
4
4
5
+ // Text encoding
6
+ const encoding = new TextEncoder ( ) ;
7
+
5
8
/**
6
9
* The map holds key-value pairs.
7
10
* Any value (both objects and primitive values) may be used as either a key or a value.
@@ -50,12 +53,16 @@ class HashMap {
50
53
* @return {integer } bucket index
51
54
*/
52
55
hashFunction ( key ) {
53
- const str = String ( key ) ;
56
+ const bytes = encoding . encode ( key ) ;
57
+ const { length } = bytes ;
58
+
54
59
let hash = 2166136261 ; // FNV_offset_basis (32 bit)
55
- for ( let i = 0 ; i < str . length ; i += 1 ) {
56
- hash ^= str . codePointAt ( i ) ; // XOR
60
+
61
+ for ( let i = 0 ; i < length ; ) {
62
+ hash ^= bytes [ i ++ ] ; // XOR
57
63
hash *= 16777619 ; // 32 bit FNV_prime
58
64
}
65
+
59
66
return ( hash >>> 0 ) % this . buckets . length ;
60
67
}
61
68
// end::hashFunction[]
You can’t perform that action at this time.
0 commit comments