当前位置: 首页 > news >正文

Java基础(六):HashMap(使用方法详解)

Java HashMap

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

img

HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。

img

HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

基本类型对应的包装类表如下:

基本类型引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

HashMap 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.HashMap; // 引入 HashMap 类

以下实例我们创建一个 HashMap 对象 Sites, 整型(Integer)的 key 和字符串(String)类型的 value:

HashMap<Integer, String> Sites = new HashMap<Integer, String>();

添加元素

HashMap 类提供类很多有用的方法,添加键值对(key-value)可以使用 put() 方法:

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    System.out.println(Sites);
  }
}

执行以上代码,输出结果如下:

{1=Google, 2=Runoob, 3=Taobao, 4=Zhihu}

以下实例创建一个整型(String)的 key 和 整型(String)的 value:

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<String, String> Sites = new HashMap<String, String>();
    // 添加键值对
    Sites.put("one", "Google");
    Sites.put("two", "Runoob");
    Sites.put("three", "Taobao");
    Sites.put("four", "Zhihu");
    System.out.println(Sites);
  }
}

执行以上代码,输出结果如下:

{four=Zhihu, one=Google, two=Runoob, three=Taobao}

访问元素

我们可以使用 get(key) 方法来获取 key 对应的 value:

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    System.out.println(Sites.get(3));
  }
}

执行以上代码,输出结果如下:

Taobao

删除元素

我们可以使用 remove(key) 方法来删除 key 对应的键值对(key-value):

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    Sites.remove(4);
    System.out.println(Sites);
  }
}

执行以上代码,输出结果如下:

{1=Google, 2=Runoob, 3=Taobao}

删除所有键值对(key-value)可以使用 clear 方法:

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    Sites.clear();
    System.out.println(Sites);
  }
}

执行以上代码,输出结果如下:

{}

计算大小

如果要计算 HashMap 中的元素数量可以使用 size() 方法:

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    System.out.println(Sites.size());
  }
}

执行以上代码,输出结果如下:

4

迭代 HashMap

可以使用 for-each 来迭代 HashMap 中的元素。

如果你只想获取 key,可以使用 keySet() 方法,如果你只想获取 value,可以使用 values() 方法。

实例

// 引入 HashMap 类    
import java.util.HashMap;

public class RunoobTest {
  public static void main(String[] args) {
    // 创建 HashMap 对象 Sites
    HashMap<Integer, String> Sites = new HashMap<Integer, String>();
    // 添加键值对
    Sites.put(1, "Google");
    Sites.put(2, "Runoob");
    Sites.put(3, "Taobao");
    Sites.put(4, "Zhihu");
    // 输出 key 和 value
    for (Integer i : Sites.keySet()) {
      System.out.println("key: " + i + " value: " + Sites.get(i));
    }
  }
}

执行以上代码,输出结果如下:

key: 1 value: Google
key: 2 value: Runoob
key: 3 value: Taobao
key: 4 value: Zhihu
输出 key 和 value
    for (Integer i : Sites.keySet()) {
      System.out.println("key: " + i + " value: " + Sites.get(i));
    }
  }
}

执行以上代码,输出结果如下:

key: 1 value: Google
key: 2 value: Runoob
key: 3 value: Taobao
key: 4 value: Zhihu

相关文章:

  • Java基础 (三):LinkedList(含使用方法详解)
  • Java基础(二):迭代器(Iterator)(含使用方法详解)
  • Java基础(一):Java集合框架(超详细解析,看完面试不再怕)
  • 【LeetCode】206.反转链表(动图解析,双指针+递归,java实现)
  • 【LeetCode】21.合并两个有序列表(递归+迭代,java实现,含gif动图)
  • 一套通用的Java后台管理系统,采用springboot实现(附带源码地址)
  • HashMap方法之computeIfAbsent()用法详解,含案例分析
  • 【LeetCode】219.存在重复元素 II (四种解法开拓思路,java实现)
  • 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)
  • 【LeetCode】36.有效的数独 (一次迭代,使用哈希表,java实现)
  • 一文搞定java集合框架,四万字图文详解,深入分析源码,请带着耐心点进来!
  • VScode 结合git的全面使用流程,再也不用记住git的命令了!
  • 校招(含实习生春招)指南
  • 来自鹅厂师兄发自内心的建议,送给迷茫的工作者
  • 【leetcode】374.猜数字大小 (二分查找多种方法实现!开拓视野)
  • Google 是如何开发 Web 框架的
  • JavaScript-如何实现克隆(clone)函数
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • go append函数以及写入
  • Selenium实战教程系列(二)---元素定位
  • text-decoration与color属性
  • Vim 折腾记
  • 测试开发系类之接口自动化测试
  • 高程读书笔记 第六章 面向对象程序设计
  • 如何在GitHub上创建个人博客
  • 使用parted解决大于2T的磁盘分区
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 微服务入门【系列视频课程】
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 阿里云服务器如何修改远程端口?
  • ​MySQL主从复制一致性检测
  • #define用法
  • (2)STM32单片机上位机
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (译)计算距离、方位和更多经纬度之间的点
  • .describe() python_Python-Win32com-Excel
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET微信公众号开发-2.0创建自定义菜单
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [LeetCode系列]子集枚举问题[无重复元素]
  • [Linux](16)网络编程:网络概述,网络基本原理,套接字,UDP,TCP,并发服务器编程,守护(精灵)进程
  • [mit6.s081] 笔记 Lab2:system calls
  • [Spark][Hive]Hive的命令行客户端启动:
  • [SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类
  • [TLSR8266] 1、搭建tlsr8266编译框架在win服务器中
  • [UE4]性能优化指南(程序向)
  • [VUE]1-创建vue工程
  • [百度百科]PCI-E的速度
  • [笔记] 汉字判断