本文介绍: HashMap一个列表,它存储内容键值(keyvalue)映射。HashMapkeyvalue 类型可以相同也可以不同,根据定义,不受限制

 

目录

1、HashMap的基本方法

1.1、基础方法(增删改查)

1.2、其他方法 

2、HashMap的相关例题

2.1、题目介绍

2.2、解题

2.2.1、解题思路

2.2.2、解题图解

2.3、解题代码

1、HashMap基本方法

HashMap一个列表,它存储内容键值(keyvalue)映射。
HashMapkeyvalue 类型可以相同也可以不同,根据定义,不受限制

1.1、基础方法增删改查

1.定义一个哈希

HashMap&lt;Integer, String> hashmap= new HashMap<Integer, String>();

2.添加键值对(keyvalue)(增)

hashmap.put(1, “string1″); // 执行完后hash表内为{1=string1}
hashmap.put(2, “string2″); // 执行完后hash表内为{1=string1, 2=string2}
hashmap.put(2, “string2″); // 执行完后hash表内为{1=string1, 2=string2, 3=string3}

3.根据key值访问value(查)

hashmap.get(1); // 返回string1
hashmap.get(2); // 返回string2
hashmap.get(3); // 返回string3

4.根据key值删除元素(删)

hashmap.remove(1); // 执行完后hash表内为{2=string2, 3=string3}
hashmap.remove(2); // 执行完后hash表内为{3=string3}
hashmap.remove(3); // 执行完后hash表内为{}
// 删除所有键值对
hashmap.clear();

5.替换 hashMap 中是指定的key对应value(改)

hashmap.replace(key,value); // 返回0

6.返回hashmap中键值对的数量

hashmap.size(); // 返回0

7.getOrDefault(Object key, V defaultValue)
方法用于当Map集合中有这个key时,就使用这个key对应value值,如果没有使用默认值defaultValue;

hashmap.getOrDefault(key,defaultValue);

1.2、其他方法 

1.检查hashMap中是否存在指定的key对应的映射关系

hashmap.containsKey(key); 

2.检查hashMap中是否存在指定value对应的映射关系

hashmap.containsValue(value); 

3.hashmap是否为空

hashmap.isEmpty(); 

4.HashMap.values() 方法

hashmap.values(); // 返回所有Value值组成的集合

例如
 如果有HashMap: {1=Google, 2=Runoob, 3=Taobao}
 则返回Values: [Google, Runoob, Taobao]

2、HashMap的相关例题

2.1、题目介绍

原题链接128. 最长连续序列 – 力扣(LeetCode)

示例 1:

输入nums = [100,4,200,1,3,2]
输出4
解释最长数字连续序列是[1, 2, 3, 4]。它的长度为 4。

示例 2:

输入nums = [0,3,7,2,5,8,4,6,0,1]
输出9

提示

2.2、解题

2.2.1、解题思路

使用一个HashMap存储当前遍历过的数字,如果hashMap中已经存在这个数字,说明之前已经处理过这个数字,不做任何处理【是为了防止出现重复数字再次计算造成错误
每次遍历到新数字时,去hashMap中寻找比它小1的数字和比它大1的数字对应的长度,记为minmax
如果minmax均为0,说明此时不存在上下界,直接记为1.
当出现minmax不为0时,说明当前数字有新的上下界,计算出上下界所对应的数字,并在map中修改对应的上下界大小。 

若不存在上下界:直接更新为1;
若存在上界不存在下界:更新上界数字长度+1,即max + 1;
若存在下界不存在上界:更新下界数字长度+1,即min + 1;
若上下界均存在:同时更新上下界长度为下界长度+上界长度+1,即min + max + 1

2.2.2、解题图解

数组nums从i=0开始遍历,has为哈希表,result用来保存最后结果,min用来保存键值(key)为 nums[ i-1 ] 在哈希表中所对应的值(value) ;max用来保存键值(key)为 nums[ i+1 ] 在哈希表中所对应的值(value) ,now保存当前循环最长连续序列的结果用于和result进行比较 

 

当前的 i = 0 ,nums[ i ] = 100,   has 中没有 key 为 100 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中没有 key 为 99(nums[i]-1) 的项, 所以 min = 0 ;由于 has 中没有 key 为 101(nums[i]+1) 的项, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 100,value = 1 的项;result 小于 now,所以让 result = now = 1

当前的 i = 1 ,nums[ i ] = 4,   has 中没有 key 为 4 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中没有 key 为 3(nums[i]-1) 的项, 所以 min = 0 ;由于 has 中没有 key 为 5(nums[i]+1) 的项, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 4,value = 1 的项;result 等于 now,所以 result 不变

当前的 i = 2 ,nums[ i ] = 200,   has 中没有 key 为 200 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中没有 key 为 199(nums[i]-1) 的项, 所以 min = 0 ;由于 has 中没有 key 为 201(nums[i]+1) 的项, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 200,value = 1 的项;result 等于 now,所以 result 不变

当前的 i = 3 ,nums[ i ] = 1,   has 中没有 key 为 1 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中没有 key 为 0(nums[i]-1) 的项, 所以 min = 0 ;由于 has 中没有 key 为 2(nums[i]+1) 的项, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 1,value = 1 的项;result 等于 now,所以 result 不变

当前的 i = 4 ,nums[ i ] = 3,   has 中没有 key 为 3 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中没有 key 为 2(nums[i]-1) 的项, 所以 min = 0 ;由于 has 中有 key 为 4(nums[i]+1) 的项, 所以 max = 1 ;因此 now = 2 ;然后在 has 中添加 key = 3,value = 2 的项,添加 key = 3 + 1, value = 2 的项(has.put(nums[i]+max, now));result 小于 now,所以让 result = now = 2

当前的 i = 5 ,nums[ i ] = 2,   has 中没有 key 为 2 的项,所以让 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中有 key 为 1(nums[i]-1) 的项, 所以 min = 1 ;由于 has 中有 key 为 3(nums[i]+1) 的项, 所以 max = 2 ;因此 now = 4 ;然后在 has 中添加 key = 2,value = 4 的项,添加 key = 2 + 1, value = 4 的项(has.put(nums[i]+max, now)),添加 key = 2 – 1, value = 4 的项(has.put(nums[i]-min, now));result 小于 now,所以让 result = now = 4

 

最后返回 result ,result 等于 4

2.3、解题代码

class Solution {
    public int longestConsecutive(int[] nums) {
        HashMap<Integer, Integer> has = new HashMap<>();
        int result = 0;
        for (int i=0; i<nums.length; i++){
            if (has.get(nums[i]) != null){
                continue;
            }
            int min = has.getOrDefault(nums[i]-1, 0);
            int max = has.getOrDefault(nums[i]+1, 0);
            int now = min + max + 1;
            if (min == 0 &amp;&amp; max == 0){
                has.put(nums[i], now);
            } else if (min == 0){
                has.put(nums[i]+max, now);
                has.put(nums[i], now);
            } else if (max == 0){
                has.put(nums[i], now);
                has.put(nums[i]-min, now);
            } else{
                has.put(nums[i]+max, now);
                has.put(nums[i], 1);
                has.put(nums[i]-min, now);
            }
            result = Math.max(result,now);
        }
        return result;
    }
}

 

 

【LeetCode力扣相关

【LeetCode力扣】42.接雨水(困难)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134291521?spm=1001.2014.3001.5502【LeetCode力扣】287.寻找重复数(中等)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134232926?spm=1001.2014.3001.5502【LeetCode力扣】11. 盛最多水的容器中等)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/134102596?spm=1001.2014.3001.5502

原文地址:https://blog.csdn.net/m0_65277261/article/details/134712832

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21774.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注