浅谈hash家族中HashMap和Hash table的异同,用代码实现Leetcode中哈希表的题目

HashMap和Hash table 是开发中最经常使用到的数据结构,所以我们必须对其有深入的了解。我的水平比较低,写的都是皮毛,大佬勿喷,谢谢!
相同点:HashMap和Hash table都可以用来存储key—value数据;
不同点:1.HashMap的key和value都可以是Null,然而Hash table是不可以 的;2.HashMap是线程不安全的,所以它不需要考虑线程的问题,导致它的 存储效率较高,然而Hash table是线程不安全的,所以Hash table的存储效率较低。
为了在线程安全和存储效率之间取得平衡,于是在JDK1.5版本之后推出的线程并发库中包含了一个类ConcurrentHashMap 解决了这个问题,ConcurrentHashMap的工作原理是通过把大的Map分成N个小的Segment(类似于Hash table),可以提供相同的线程安全,实现了线程并发,效率提高了N倍,默认提高了16倍。
Leetcode中的水题:Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

我们先对数组进行排序,然后使用双指针方法或者二分查找方法,这样时间复杂度为 O(nlgn),空间复杂度为 O(1)。用 HashMap 存储数组元素和索引的映射,在访问到 nums[i] 时,判断 HashMap 中是否存在 target - nums[i] ,如果存在说明 target - nums[i] 所在的索引和 i 就是要找的两个数。该方法的时间复杂度为 O(n),空间复杂度为 O(n),和缓冲类似,使用空间来换取时间。
代码如下:
public int[] twoSum(int[] nums, int target) {
HashMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值