浅谈hash家族中HashMap和Hash table的异同,用代码实现Leetcode中哈希表的题目
2018-02-16 23:04
696 查看
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
相同点: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
相关文章推荐
- Leetcode平台上的TwoSum题目用Java哈希表实现
- 手写实现HashMap代码
- HashMap/HashSet,hashCode,哈希表
- 【leetcode】第6题 ZigZag Conversion 题目+解析+代码
- Leetcode平台上的Median of Two Sorted Arrays题目用Java快排实现
- HashMap的实现原理及hash冲突解决方法
- Leetcode题目汇总-Java实现
- 【leetcode】第59题 Spiral Matrix II 题目+解析+代码
- 【leetcode】第73题 Set Matrix Zeroes 题目+解析+JAVA代码
- HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
- 【leetcode】第36题 Valid Sudoku 题目+解析+代码
- 从代码层读懂 Java HashMap 的实现原理
- 哈希表-散列表-哈希存储-代码实现
- 哈希表(亦称散列表)HashMap源码读后感,实现原理剖析
- 【leetcode】第46题 Permutations(递归法)题目+解析+代码
- hash实现数组去重代码
- 课设题目:哈希表实现电话号码查找系统
- HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash - schbook
- 哈希表(HashMap)分析及实现(JAVA)
- 浅谈HashMap的内部实现