entry
的声明如下:
pub fn entry(&mut self, key: K) -> Entry<'_, K, V> // key is move into entry
相比之下,get
方法的代码如下:
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V> where // k is just a shared reference
K: Borrow<Q>,
Q: Hash + Eq,
Entry
接口包含了 key
和 or_insert_with_key
方法, 但这两种方法都只需要一个对 key
的引用,那么为什么 entry
需要拥有 key
的所有权,而 get
却不需要呢?换句话说,
Entry
获取 key
所有权提供了什么功能?如果所有的功能都可以通过共享引用来实现,那么我会认为需要所有权是不必要的。
HashMap
需要拥有一个K
,因为键可以具有相同的哈希值,但仍需要区分它们。 - kmdrekoRefHashMap
也可能会有所帮助。 - nalzokHashMap<&Key, &Value>
。 - kmdrekokeys
、get_key_value
)。 - Masklinninsert
中),它们仍然可以返回对键的引用。 - nalzok