@@ -13,10 +13,10 @@ struct Pair {
13
13
14
14
/* 链式地址哈希表 */
15
15
struct HashMapChaining {
16
- size : i32 ,
17
- capacity : i32 ,
16
+ size : usize ,
17
+ capacity : usize ,
18
18
load_thres : f32 ,
19
- extend_ratio : i32 ,
19
+ extend_ratio : usize ,
20
20
buckets : Vec < Vec < Pair > > ,
21
21
}
22
22
@@ -34,7 +34,7 @@ impl HashMapChaining {
34
34
35
35
/* 哈希函数 */
36
36
fn hash_func ( & self , key : i32 ) -> usize {
37
- key as usize % self . capacity as usize
37
+ key as usize % self . capacity
38
38
}
39
39
40
40
/* 负载因子 */
@@ -45,12 +45,11 @@ impl HashMapChaining {
45
45
/* 删除操作 */
46
46
fn remove ( & mut self , key : i32 ) -> Option < String > {
47
47
let index = self . hash_func ( key) ;
48
- let bucket = & mut self . buckets [ index] ;
49
48
50
49
// 遍历桶,从中删除键值对
51
- for i in 0 ..bucket . len ( ) {
52
- if bucket [ i ] . key == key {
53
- let pair = bucket . remove ( i) ;
50
+ for ( i , p ) in self . buckets [ index ] . iter_mut ( ) . enumerate ( ) {
51
+ if p . key == key {
52
+ let pair = self . buckets [ index ] . remove ( i) ;
54
53
self . size -= 1 ;
55
54
return Some ( pair. val ) ;
56
55
}
@@ -97,30 +96,27 @@ impl HashMapChaining {
97
96
}
98
97
99
98
let index = self . hash_func ( key) ;
100
- let bucket = & mut self . buckets [ index] ;
101
99
102
100
// 遍历桶,若遇到指定 key ,则更新对应 val 并返回
103
- for pair in bucket {
101
+ for pair in self . buckets [ index ] . iter_mut ( ) {
104
102
if pair. key == key {
105
103
pair. val = val;
106
104
return ;
107
105
}
108
106
}
109
- let bucket = & mut self . buckets [ index] ;
110
107
111
108
// 若无该 key ,则将键值对添加至尾部
112
109
let pair = Pair { key, val } ;
113
- bucket . push ( pair) ;
110
+ self . buckets [ index ] . push ( pair) ;
114
111
self . size += 1 ;
115
112
}
116
113
117
114
/* 查询操作 */
118
115
fn get ( & self , key : i32 ) -> Option < & str > {
119
116
let index = self . hash_func ( key) ;
120
- let bucket = & self . buckets [ index] ;
121
117
122
118
// 遍历桶,若找到 key ,则返回对应 val
123
- for pair in bucket {
119
+ for pair in self . buckets [ index ] . iter ( ) {
124
120
if pair. key == key {
125
121
return Some ( & pair. val ) ;
126
122
}
0 commit comments