4个版本
使用旧的Rust 2015
0.2.1 | 2017年7月29日 |
---|---|
0.2.0 |
|
0.1.2 | 2017年6月26日 |
0.1.1 | 2017年6月26日 |
0.1.0 | 2017年6月26日 |
#1128 在 算法
1,473,352 每月下载量
用于 4,289 个crate (393直接)
16KB
291 行
Fx Hash
此哈希算法是从Rustc编译器中提取出来的。这是Firefox内部某些操作使用的相同哈希算法。该算法的优势在于在64位平台上每次处理8个字节,而FNV算法每次处理一个字节。
免责声明
这不是一个加密安全的哈希,因此强烈建议您不要将此哈希用于加密目的。此外,此哈希算法并非旨在防止任何攻击,以确定可能用于在HashMap
中造成二次行为的碰撞。因此,不建议在可能存在碰撞或DDoS攻击的地方公开此哈希。
示例
构建基于Fx的哈希映射。
extern crate fxhash;
use fxhash::FxHashMap;
let mut hashmap = FxHashMap::new();
hashmap.insert("black", 0);
hashmap.insert("white", 255);
构建基于Fx的哈希集。
extern crate fxhash;
use fxhash::FxHashSet;
let mut hashmap = FxHashSet::new();
hashmap.insert("black");
hashmap.insert("white");
基准测试
通常在fxhash
上优于fnv
在u32
、u64
或任何长度大于等于5的字节序列上。然而,请注意,哈希速度并不是唯一值得考虑的特性。话虽如此,当从基于fnv
的哈希映射切换到基于fx
的哈希映射时,Rustc的速度有所提升。
bench_fnv_003 ... bench: 3 ns/iter (+/- 0)
bench_fnv_004 ... bench: 2 ns/iter (+/- 0)
bench_fnv_011 ... bench: 6 ns/iter (+/- 1)
bench_fnv_012 ... bench: 5 ns/iter (+/- 1)
bench_fnv_023 ... bench: 14 ns/iter (+/- 3)
bench_fnv_024 ... bench: 14 ns/iter (+/- 4)
bench_fnv_068 ... bench: 57 ns/iter (+/- 11)
bench_fnv_132 ... bench: 145 ns/iter (+/- 30)
bench_fx_003 ... bench: 4 ns/iter (+/- 0)
bench_fx_004 ... bench: 3 ns/iter (+/- 1)
bench_fx_011 ... bench: 5 ns/iter (+/- 2)
bench_fx_012 ... bench: 4 ns/iter (+/- 1)
bench_fx_023 ... bench: 7 ns/iter (+/- 3)
bench_fx_024 ... bench: 4 ns/iter (+/- 1)
bench_fx_068 ... bench: 10 ns/iter (+/- 3)
bench_fx_132 ... bench: 19 ns/iter (+/- 5)
bench_seahash_003 ... bench: 30 ns/iter (+/- 12)
bench_seahash_004 ... bench: 32 ns/iter (+/- 22)
bench_seahash_011 ... bench: 30 ns/iter (+/- 4)
bench_seahash_012 ... bench: 31 ns/iter (+/- 1)
bench_seahash_023 ... bench: 32 ns/iter (+/- 6)
bench_seahash_024 ... bench: 31 ns/iter (+/- 5)
bench_seahash_068 ... bench: 40 ns/iter (+/- 9)
bench_seahash_132 ... bench: 50 ns/iter (+/- 12)
依赖关系
~120KB