ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【LeeCode碎碎念】从「两数之和」理解 Integer 与数组返回值

【LeeCode碎碎念】从「两数之和」理解 Integer 与数组返回值 写 Java 的「两数之和」时我产生了如下两个问题1. 为什么用 Integer不能用 intint是基本类型Integer是它对应的包装类属于引用类型。Java 泛型的类型参数必须是引用类型所以MapInteger,IntegerhtnewHashMap();// 正确// Mapint, int ht new HashMap(); // 编译错误操作哈希表时仍可以传入intJava 会进行自动装箱ht.put(target-nums[i],i);// 两个 int 自动转换为 Integer取出的Integer放入int[]时会进行自动拆箱returnnewint[]{i,ht.get(nums[i])};需要注意对 null 拆箱会抛出 NullPointerException。Map.get()在键不存在时会返回null因此取值后要确认非空再当作int使用。2. return null 和 return new int[0] 有什么区别两种写法都能编译因为int[] 本身是引用类型即使其中的元素是基本类型int。写法含义读取.length遍历访问[0]return null;没有数组对象空指针异常空指针异常空指针异常return new int[0];存在一个长度为 0 的数组得到 0正常执行 0 次数组越界异常返回null时调用方需要先判断是否为空返回空数组时可以直接读取长度或遍历但仍不能访问其中的元素。new int[0]表示空数组不是包含一个 0 的数组后者应写为new int[]{0}。3. 简单总结如果“无解”是正常情况返回空数组通常更方便也可以约定返回null但调用方必须检查。若按约定必须有解无解时也可以抛出异常。哈希表解法的平均时间复杂度为 O(n)空间复杂度为 O(n)。对应知识点Java泛型自动拆装箱Boxing Unboxing
返回列表