Java HashMap
HashMap 是一个散列表,它å˜å‚¨çš„内容是键值对(key-value)æ˜ å°„ã€‚
HashMap 实现了 Map 接å�£ï¼Œæ ¹æ�®é”®çš„ HashCode 值å˜å‚¨æ•°æ�®ï¼Œå…·æœ‰å¾ˆå¿«çš„访问速度,最多å…�许一æ�¡è®°å½•的键为 null,ä¸�支æŒ�线程å�Œæ¥ã€‚
HashMap æ˜¯æ— åº�的,å�³ä¸�会记录æ�’入的顺åº�。
HashMap 继承于AbstractMap,实现了 Map�Cloneable�java.io.Serializable 接�。
HashMap çš„ key 与 value 类型å�¯ä»¥ç›¸å�Œä¹Ÿå�¯ä»¥ä¸�å�Œï¼Œå�¯ä»¥æ˜¯å—符串(String)类型的 key å’Œ value,也å�¯ä»¥æ˜¯æ•´åž‹ï¼ˆInteger)的 key å’Œå—符串(String)类型的 value。
![]()
HashMap ä¸çš„å…ƒç´ å®žé™…ä¸Šæ˜¯å¯¹è±¡ï¼Œä¸€äº›å¸¸è§�的基本类型å�¯ä»¥ä½¿ç”¨å®ƒçš„包装类。
基本类型对应的包装类表如下:
| 基本类型 | 引用类型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
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() 方法:
实例
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:
实例
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:
实例
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):
实例
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 方法:
实例
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() 方法:
实例
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() 方法,然å�Žå�¯ä»¥é€šè¿‡ get(key) 获å�–对应的 valueï¼Œå¦‚æžœä½ å�ªæƒ³èŽ·å�– value,å�¯ä»¥ä½¿ç”¨ values() 方法。
实例
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));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出�一个value
System.out.print(value + ", ");
}
}
}
执行以上代ç �,输出结果如下:
key: 1 value: Google key: 2 value: Runoob key: 3 value: Taobao key: 4 value: Zhihu Google, Runoob, Taobao, Zhihu,
Java HashMap 方法
hashmapJava HashMap 常用方法列表如下:
| 方法 | �述 |
|---|---|
| clear() | åˆ é™¤ hashMap ä¸çš„æ‰€æœ‰é”®/值对 |
| clone() | �制一份 hashMap |
| isEmpty() | åˆ¤æ– hashMap 是å�¦ä¸ºç©º |
| size() | 计算 hashMap ä¸é”®/值对的数é‡� |
| put() | 将键/å€¼å¯¹æ·»åŠ åˆ° hashMap ä¸ |
| putAll() | 将所有键/å€¼å¯¹æ·»åŠ åˆ° hashMap ä¸ |
| putIfAbsent() | 如果 hashMap ä¸ä¸�å˜åœ¨æŒ‡å®šçš„键,则将指定的键/值对æ�’入到 hashMap ä¸ã€‚ |
| remove() | åˆ é™¤ hashMap 䏿Œ‡å®šé”® key çš„æ˜ å°„å…³ç³» |
| containsKey() | 检查 hashMap 䏿˜¯å�¦å˜åœ¨æŒ‡å®šçš„ key å¯¹åº”çš„æ˜ å°„å…³ç³»ã€‚ |
| containsValue() | 检查 hashMap 䏿˜¯å�¦å˜åœ¨æŒ‡å®šçš„ value å¯¹åº”çš„æ˜ å°„å…³ç³»ã€‚ |
| replace() | 替æ�¢ hashMap 䏿˜¯æŒ‡å®šçš„ key 对应的 value。 |
| replaceAll() | å°† hashMap ä¸çš„æ‰€æœ‰æ˜ 射关系替æ�¢æˆ�给定的函数所执行的结果。 |
| get() | 获�指定 key 对应对 value |
| 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 ä¸ã€‚ |
更多 API 方法�以查看:https://www.runoob.com/manual/jdk11api/java.base/java/util/HashMap.html
Java 集�框架
点我分享笔记