1
+ function HashTableSeparateChaining ( ) {
2
+
3
+ var table = [ ] ;
4
+
5
+ var ValuePair = function ( key , value ) {
6
+ this . key = key ;
7
+ this . value = value ;
8
+
9
+ this . toString = function ( ) {
10
+ return '[' + this . key + ' - ' + this . value + ']' ;
11
+ }
12
+ } ;
13
+
14
+ var loseloseHashCode = function ( key ) {
15
+ var hash = 0 ;
16
+ for ( var i = 0 ; i < key . length ; i ++ ) {
17
+ hash += key . charCodeAt ( i ) ;
18
+ }
19
+ return hash % 37 ;
20
+ } ;
21
+
22
+ var hashCode = function ( key ) {
23
+ return loseloseHashCode ( key ) ;
24
+ } ;
25
+
26
+ this . put = function ( key , value ) {
27
+ var position = hashCode ( key ) ;
28
+ console . log ( position + ' - ' + key ) ;
29
+
30
+ if ( table [ position ] == undefined ) {
31
+ table [ position ] = new LinkedList ( ) ;
32
+ }
33
+ table [ position ] . append ( new ValuePair ( key , value ) ) ;
34
+ } ;
35
+
36
+ this . get = function ( key ) {
37
+ var position = hashCode ( key ) ;
38
+
39
+ if ( table [ position ] !== undefined && ! table [ position ] . isEmpty ( ) ) {
40
+
41
+ //iterate linked list to find key/value
42
+ var current = table [ position ] . getHead ( ) ;
43
+
44
+ while ( current . next ) {
45
+ if ( current . element . key === key ) {
46
+ return current . element . value ;
47
+ }
48
+ current = current . next ;
49
+ }
50
+
51
+ //check in case first or last element
52
+ if ( current . element . key === key ) {
53
+ return current . element . value ;
54
+ }
55
+ }
56
+ return undefined ;
57
+ } ;
58
+
59
+ this . remove = function ( key ) {
60
+
61
+ var position = hashCode ( key ) ;
62
+
63
+ if ( table [ position ] !== undefined ) {
64
+
65
+ //iterate linked list to find key/value
66
+ var current = table [ position ] . getHead ( ) ;
67
+
68
+ while ( current . next ) {
69
+ if ( current . element . key === key ) {
70
+ table [ position ] . remove ( current . element ) ;
71
+ if ( table [ position ] . isEmpty ( ) ) {
72
+ table [ position ] = undefined ;
73
+ }
74
+ return true ;
75
+ }
76
+ current = current . next ;
77
+ }
78
+
79
+ //check in case first or last element
80
+ if ( current . element . key === key ) {
81
+ table [ position ] . remove ( current . element ) ;
82
+ if ( table [ position ] . isEmpty ( ) ) {
83
+ table [ position ] = undefined ;
84
+ }
85
+ return true ;
86
+ }
87
+ }
88
+
89
+ return false ;
90
+ } ;
91
+
92
+ this . print = function ( ) {
93
+ for ( var i = 0 ; i < table . length ; ++ i ) {
94
+ if ( table [ i ] !== undefined ) {
95
+ console . log ( table [ i ] . toString ( ) ) ;
96
+ }
97
+ }
98
+ } ;
99
+ }
0 commit comments