I've only been learning Rust for a few days. I think that these two code samples are the same, but the compiler disagrees. Can you explain what happens in part II? Why do I need to dereference key twice, but value once?
Part I
use std::collections::HashMap;
let mut h = HashMap::new();   
h.insert(1, 1);
h.insert(2, 2);
let mut keys: Vec<i32> = Vec::new();
let mut values: Vec<i32> = Vec::new();
for (k, v) in &h {
    keys.push(**k);
    values.push(*v);
}
Part II
fn main() {
    let mut v = vec![2, 3, 5, 1, 2, 3, 8, 6, 3, 1, 4, 6, 7];
    use std::collections::HashMap;
    let mut h = HashMap::new();
    for element in &v {
        let count = h.entry(element).or_insert(0);
        *count += 1;
    }
    let mut keys: Vec<i32> = Vec::new();
    let mut values: Vec<i32> = Vec::new();
    for (k, v) in &h {
        keys.push(**k);
        values.push(*v);
    }
    println!("{:?}", keys);
}
 
     
     
     
    