16个版本 (8个破坏性更新)
0.9.1 | 2024年5月12日 |
---|---|
0.9.0 | 2024年1月9日 |
0.8.4 | 2023年8月28日 |
0.8.3 | 2023年6月11日 |
0.3.0 | 2019年7月12日 |
#20 在 数据结构 中
每月 下载量 2,635,229
在 2,421 个crate中 使用(直接使用 62 个)
98KB
3K SLoC
hashlink -- HashMap类似容器,可以按用户可控的顺序存储其键值对
这个crate是linked-hash-map的分支,基于hashbrown实现更现代版本的LinkedHashMap
、LinkedHashSet
和LruCache
。
一个重要的API更改是,当使用LinkedHashMap
作为LRU缓存时,它允许您轻松检索条目并将其移动到末尾,或者在不重复键哈希和查找的情况下在末尾生成新条目
let mut lru_cache = LinkedHashMap::new();
let key = "key".to_owned();
// Try to find my expensive to construct and hash key
let _cached_val = match lru_cache.raw_entry_mut().from_key(&key) {
RawEntryMut::Occupied(mut occupied) => {
// Cache hit, move entry to the back.
occupied.to_back();
occupied.into_mut()
}
RawEntryMut::Vacant(vacant) => {
// Insert expensive to construct key and expensive to compute value,
// automatically inserted at the back.
vacant.insert(key.clone(), 42).1
}
};
或者,一种更简单的方法来做同样的事情
let mut lru_cache = LinkedHashMap::new();
let key = "key".to_owned();
let _cached_val = lru_cache
.raw_entry_mut()
.from_key(&key)
.or_insert_with(|| (key.clone(), 42));
这个crate包含相当多的不安全代码,这些代码用于处理其内部链表,并且不安全代码与原始的linked-hash-map
实现有很大的差异。它目前在miri和sanitizers下通过测试,但它可能还需要更多的审查和测试,并检查测试覆盖率。
致谢
这个crate中有大量代码直接从linked-hash-map
和hashbrown
复制,尤其是测试、关联类型如迭代器以及诸如Debug
实现等。
许可
这个库与linked-hash-map和hashbrown具有相同的许可,它受以下任一许可的约束
- MIT许可 LICENSE-MIT 或 http://opensource.org/licenses/MIT
- Apache License 2.0 LICENSE-APACHE 或 https://opensource.org/licenses/Apache-2.0
任选其一。
依赖
~1.1–1.6MB
~23K SLoC