leetcode第一题
来源:1-1 哈希表基础
weixin_慕圣6334738
2022-01-28 02:47:55
bobo老师你好,
关于leetcode第一题, 下面是我的java解法, 但是有一点我不明白的是在第十行的位置我写了
Integer index = record.get(target - nums[i]); 但是如果我写的是int index = record.get(target - nums[i]); 那么就会报错, 那么我一开始的理解就是我的HashMap里面储存的是Integer所以不能返回int类型(不知道这个理解对不对)

然后我又看了看它的参考答案

它这里的complement是int类型,为什么就能够直接在map里面搜索了呢, 为什么不是Integer类型才能搜索呢? (抱歉可能我对java的理解并不深刻)
1回答
liuyubobobo
2022-01-28
写 int index = record.get(target - nums[i]),语法上没有问题。但是:
1)
index 是 int 型,是一个基本数据类型,基本数据类型不可能为 null,也不能和 null 作比较(非基本类型都是引用,才有可能是 null);
2)
如果 record.get(target - nums[i]) 中,target - nums[i] 不存在,则会发生运行时错误(类似数组越界)。你可以尝试,以下代码编译没有错误,运行会出错。
HashMap<Integer, Integer> record = new HashMap<>();
record.put(1, 1);
int index = record.get(666);
理由和 1)差不多,如果 record 中不存在 666,就会返回 null,而 null 不能赋值给 int。
==========
根据这两条,再仔细看你提供的代码 2),避开了 record.get 为 null 的可能性(因为先使用 cintainsKey 确保了一定能在 record 中取到值。)
继续加油!:)
相似问题