3个稳定版本
使用旧的Rust 2015
3.0.0 | 2019年4月27日 |
---|---|
2.0.0 | 2019年4月27日 |
1.0.0 | 2019年4月27日 |
#1204在算法
每月40次下载
15KB
241 行
Fx哈希
这个哈希算法是从Rustc编译器中提取出来的。这是Firefox内部一些操作的相同哈希算法。这个算法的优势在于在64位平台上一次处理8字节,而FNV算法一次处理一个字节。
免责声明
这不是一个加密安全的哈希,因此强烈建议您不要使用此哈希进行加密目的。此外,此哈希算法未设计为防止任何用于确定碰撞的攻击,这可能导致在HashMap
中产生二次行为。因此,不建议在可能存在碰撞或DDoS攻击的地方公开此哈希。
示例
构建基于Fx的hashmap。
extern crate fxhash;
use fxhash::FxHashMap;
let mut hashmap = FxHashMap::default();
hashmap.insert("black", 0);
hashmap.insert("white", 255);
构建基于Fx的hashset。
extern crate fxhash;
use fxhash::FxHashSet;
let mut hashmap = FxHashSet::default();
hashmap.insert("black");
hashmap.insert("white");
基准测试
一般来说,在fxhash
在u32
、u64
或长度大于等于5的任何字节序列上比fnv
更快。然而,请注意,哈希速度并不是唯一值得考虑的特性。话虽如此,当从基于fnv
的hashmap切换到基于fx
的hashmap时,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)
依赖关系
~175KB