Java:
使用关联数组

如何操作:

Java 没有像某些语言那样内置的关联数组,但它提供了Map接口和HashMapTreeMap等类来填补这一角色。以下是如何使用HashMap的方法:

import java.util.HashMap;
import java.util.Map;

public class LearnMaps {
    public static void main(String[] args) {
        // 创建一个 HashMap
        Map<String, Integer> ageOfFriends = new HashMap<>();
        
        // 添加元素
        ageOfFriends.put("Alice", 24);
        ageOfFriends.put("Bob", 30);
        ageOfFriends.put("Charlie", 28);

        // 访问元素
        System.out.println("Alice 的年龄: " + ageOfFriends.get("Alice"));
        
        // 处理不存在的键
        System.out.println("不在映射中的某人的年龄: " + ageOfFriends.getOrDefault("Dan", -1));

        // 迭代元素
        for (Map.Entry<String, Integer> entry : ageOfFriends.entrySet()) {
            System.out.println(entry.getKey() + " 今年 " + entry.getValue() + " 岁。");
        }
    }
}

示例输出:

Alice 的年龄: 24
不在映射中的某人的年龄: -1
Alice 今年 24 岁。
Bob 今年 30 岁。
Charlie 今年 28 岁。

HashMap 只是一种实现。如果你的键是唯一的并且你需要它们排序,可以考虑使用 TreeMap。对于保留插入顺序的映射,LinkedHashMap 是你的好朋友。

深入了解

Java 中的映射是集合框架的一部分,最初在 JDK 1.2 中引入,但多年来已经有了显著的改进,包括在 Java 8 中引入的 forEach 方法,以更容易地迭代映射条目。映射实现的选择(HashMapLinkedHashMapTreeMap)应由你的特定需求决定,这些需求涉及排序和性能。例如,HashMap 提供 O(1) 时间性能用于基本操作(get 和 put),假设哈希函数能够在桶之间正确地分散元素。然而,如果你需要基于自然排序或自定义比较器进行排序,TreeMap 是首选,提供 O(log n) 时间用于插入和查找。

在引入 Map 之前,关联数组通常是通过两个并行数组(一个用于键,一个用于值)或自定义数据结构以较低的效率来实现的。Map 及其实现的当前替代品可能包括第三方库提供的专门映射,例如双向映射(Google 的 Guava 库中的 BiMap),用于需要高效地通过值找到键的情况。然而,对于 Java 中的大多数用例,标准库的映射足够健壮和灵活,能够处理任务。