老师这段代码不太懂为什么if和esle执行同一个语句如果已经存在了为什么还要添加?

来源:1-5 实现属于我们自己的哈希表

眼睛眯起来

2021-01-07 21:40:07

http://img.mukewang.com/climg/5ff70eff0926aa0a06020202.jpg

写回答

1回答

liuyubobobo

2021-01-07

这里想表达的是:


如果已经存在这个哈希值了,把这个哈希值对应的 value 换成新的 value(因为 value 可能不同);


如果不存在这个哈希值,则将这一组 key value 添加进去;


但因为 hashtable[] 里都是 TreeMap,而 TreeMap 的添加操作和修改 key 对应的 value 操作都是 put,所以最后结果就是这样了(如果在其他语言中,这两个操作对应的接口不一样,就可能不一样了)。


P.S. 我们自己实现的 BST,其实 add 函数也是这样设计的,没有 key 则加入新节点,有这个 key 则找到 key 对应的节点,替换 value。


最后,因为这两个语句是一样的,写成下面的逻辑也没问题:

public void add(K key, V value){

​ if(!hashtable[hash(key)].containsKey(key)){
    size ++;
    }
   
    map.put(key, value);
​}


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2636 学习 · 1090 问题

查看课程