亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java HashMap:操作、示例与最佳实践

精通 Java HashMap

探索 Java HashMap 类的核心特性、常用操作与实战示例,助你在实际应用中自信使用。

HashMap 类属于 Java 集合框架,实现哈希表,以 键值 对存储数据。每个键唯一,作为其关联值的标识符。该类实现 Map 接口,提供丰富的数据操作 API。

精通 Java HashMap:操作、示例与最佳实践

创建 HashMap

先导入 java.util.HashMap 包:

import java.util.HashMap;

再实例化 Map。可指定泛型键类型 K 和值类型 V,或依赖类型推断:

HashMap<K, V> numbers = new HashMap<>();

具体类型示例:

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

示例 1:基础 HashMap 创建

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> languages = new HashMap<>();
        languages.put("Java", 8);
        languages.put("JavaScript", 1);
        languages.put("Python", 3);
        System.out.println("HashMap: " + languages);
    }
}

输出

HashMap: {Java=8, JavaScript=1, Python=3}

HashMap 的核心操作

HashMap 类提供丰富方法。下文覆盖最常用者:


1. 添加元素

用 put() 插入键值对。键已存在则替换值。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> numbers = new HashMap<>();
        System.out.println("初始 HashMap: " + numbers);
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("put() 后的 HashMap: " + numbers);
    }
}

输出

初始 HashMap: {}
put() 后的 HashMap: {One=1, Two=2, Three=3}

本例中 Key 为 String,Value 为 Integer。


2. 访问元素

用 get(key) 获取值。键不存在返回 null。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        String value = languages.get(1);
        System.out.println("键 1 对应的值: " + value);
    }
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
键 1 对应的值: Java

也可通过 keySet()、values()、entrySet() 获取完整键集、值集合、条目集:

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        System.out.println("Keys: " + languages.keySet());
        System.out.println("Values: " + languages.values());
        System.out.println("Entries: " + languages.entrySet());
    }
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
Keys: [1, 2, 3]
Values: [Java, Python, JavaScript]
Entries: [1=Java, 2=Python, 3=JavaScript]

3. 更新值

replace(key, newValue) 替换指定键的现有值。返回旧值,键不存在返回 null。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("原始 HashMap: " + languages);
        languages.replace(2, "C++");
        System.out.println("replace() 后: " + languages);
    }
}

输出

原始 HashMap: {1=Java, 2=Python, 3=JavaScript}
replace() 后: {1=Java, 2=C++, 3=JavaScript}

4. 移除元素

用 remove(key) 删除映射,返回被移除的值。条件移除用 remove(key, value),仅当当前映射匹配指定值时才移除。

import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        String removed = languages.remove(2);
        System.out.println("移除的值: " + removed);
        System.out.println("更新后的 HashMap: " + languages);
    }
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
移除的值: Python
更新后的 HashMap: {1=Java, 3=JavaScript}

HashMap 的其他方法

方法说明
clear()清空所有映射
compute()为键计算新值
computeIfAbsent()键缺失时计算值
computeIfPresent()键存在时计算值
merge()合并新映射与现有映射
clone()创建浅拷贝
containsKey()检查特定键
containsValue()检查特定值
size()键值对数量
isEmpty()判断 Map 是否为空

遍历 HashMap

用 for-each 循环遍历键、值或条目。遍历条目需导入 java.util.Map.Entry。

import java.util.HashMap;
import java.util.Map.Entry;
class Main {
    public static void main(String[] args) {
        HashMap<Integer, String> languages = new HashMap<>();
        languages.put(1, "Java");
        languages.put(2, "Python");
        languages.put(3, "JavaScript");
        System.out.println("HashMap: " + languages);
        System.out.print("Keys: ");
        for (Integer key : languages.keySet()) {
            System.out.print(key + ", ");
        }
        System.out.print("\nValues: ");
        for (String value : languages.values()) {
            System.out.print(value + ", ");
        }
        System.out.print("\nEntries: ");
        for (Entry<Integer, String> entry : languages.entrySet()) {
            System.out.print(entry + ", ");
        }
    }
}

输出

HashMap: {1=Java, 2=Python, 3=JavaScript}
Keys: 1, 2, 3,
Values: Java, Python, JavaScript,
Entries: 1=Java, 2=Python, 3=JavaScript,

从另一个 Map 创建 HashMap

用现有 Map 的内容实例化 HashMap:

import java.util.HashMap;
import java.util.TreeMap;
class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> evenNumbers = new TreeMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("TreeMap: " + evenNumbers);
        HashMap<String, Integer> numbers = new HashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("HashMap: " + numbers);
    }
}

输出

TreeMap: {Four=4, Two=2}
HashMap: {Two=2, Three=3, Four=4}

可选构造器参数允许设置初始 容量 和 负载因子:

HashMap<K, V> numbers = new HashMap<>(8, 0.6f);

默认值为 capacity = 16 和 load factor = 0.75。

深入研究请参考官方 Java 文档或 Joshua Bloch 编著的《Effective Java》等权威资料。


java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java if…else:控制流全解析
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. Java break 语句:用法、时机与标签 break 详解
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. 精通 Java 接口:概念、实现与最佳实践
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比