【JAVA】HashMap(力扣1.两数之和)

本文仅供个人学习参考使用,知识内容可能不全面,烦请指正,参考资料已标注文末。

目录

介绍

所在包

特点

具体使用

新建哈希表

增加新元素(键值对)

删除元素 

遍历哈希表

常用方法(增删查改)

其他方法 

相关题目

参考资料


介绍

HashMap 是一个散列表(Hash table,又称:哈希表),内容的储存形式是键值对(key-value)映射。

所在包

HashMap位于Java的util包中,使用时需要import,如下:

import java.util.HashMap;

特点

  • 访问速度快(依据HashCode 值存储数据)

HashMap是一种散列表(哈希表),这种表能通过函数快速得出对应值所在的位置。
这里用函数f(x)=y进行类比,如果将键(key)看作x,那么经过f(key)的哈希函数(Hash Function)运算最终会得出y,就能得到value。
f(x)     =    y
f(key) = value
【f(key)称为哈希函数】
(实际上得到value还需要一些过程,这里不做讨论)

  • 无序(与插入的先后顺序无关)
  • 最多允许一条键为null
  • 不支持线程同步
  • HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable接口

具体使用

新建哈希表

HashMap<键的包装类型,值的包装类型> 表名= new HashMap<键的包装类型,值的包装类型>();
//例:
HashMap<Integer, String> M= new HashMap<Integer, String>();
//这里创建了一个键为Integer类型,值为String类型的哈希表,表名为M
//使用哈希表的方法时,只需要 表名.方法(参数,...)即可
//如:M.put(1,2);
//常用方法已附下

增加新元素(键值对)

//import HashMap包      
import java.util.HashMap;

public class Sorange {
    public static void main(String[] args) {
        //创建哈希表M,键和值类型分别为Integer和String
        //注意:键值对类型只能使用包装类型
        HashMap<Integer, String> M = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Baidu");
        Sites.put(2, "LeetCode");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(M);
    }
}

输出>> {1=Baidu, 2=LeetCode, 3=Taobao, 4=Zhihu}

删除元素 

//import HashMap包      
import java.util.HashMap;

public class Sorange {
    public static void main(String[] args) {
        //创建哈希表M,键和值类型分别为Integer和String
        //注意:键值对类型只能使用包装类型
        HashMap<Integer, String> M = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Baidu");
        Sites.put(2, "LeetCode");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.remove(4);//删除键为4的键值对
        System.out.println(M);
    }
}

输出>> {1=Baidu, 2=LeetCode, 3=Taobao} 

遍历哈希表

使用增强for循环

//import HashMap包      
import java.util.HashMap;

public class Sorange {
    public static void main(String[] args) {
        //创建哈希表M,键和值类型分别为Integer和String
        //注意:键值对类型只能使用包装类型
        HashMap<Integer, String> M = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Baidu");
        Sites.put(2, "LeetCode");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        //遍历输出 key 和 value
        //通过keySet()获取所有键,通过get(key)获取每个key对应的值
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // 返回所有 value 值
        for(String value: Sites.values()) {
          System.out.print(value + ", ");
        }
    }
}

输出>>

        key: 1 value: Google

        key: 2 value: LeetCode

        key: 3 value: Taobao

        key: 4 value: Zhihu

        Baidu, LeetCode, Taobao,Zhuhu

常用方法(增删查改)

方法描述
put()【增】将键/值对添加到 hashMap 中
remove()【删】删除 hashMap 中指定键 key 的映射关系
clear()【删】删除 hashMap 中的所有键/值对
get()【查】获取指定 key 对应对 value
replace()【改】替换 hashMap 中是指定的 key 对应的 value。

其他方法 

方法描述
clone()复制一份 hashMap
isEmpty()判断 hashMap 是否为空
size()计算 hashMap 中键/值对的数量
putAll()将所有键/值对添加到 hashMap 中
putIfAbsent()如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
containsKey()检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsValue()检查 hashMap 中是否存在指定的 value 对应的映射关系。
replaceAll()将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
getOrDefault()获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
forEach()对 hashMap 中的每个映射执行指定的操作。
entrySet()返回 hashMap 中所有映射项的集合集合视图。
keySet()返回 hashMap 中所有 key 组成的集合视图。
values()返回 hashMap 中存在的所有 value 值。
merge()添加键值对到 hashMap 中
compute()对 hashMap 中指定 key 的值进行重新计算
computeIfAbsent()对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中
computeIfPresent()对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。

相关题目

题目来源 题目链接难度
LeetCode(力扣)1.两数之和

简单

LeetCode(力扣)387. 字符串中的第一个唯一字符简单

参考资料

Java HashMap | 菜鸟教程
数据结构☞散列表_咕噜咕噜崩的博客-CSDN博客_散列表

哈希表_百度百科
哈希表HashMap【数据结构和算法入门6】_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值