You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 9+ 双向映射最佳简单Java对象数据结构咨询

Java 9+ 实现双向映射的最佳简单对象方案

对于双向映射需求,最适合的方案是自定义一个封装两个HashMap的工具类,利用HashMap的O(1)查找特性,避免枚举遍历的低效问题。下面是具体实现:

1. 定义映射对实体类

先创建简单的实体类存储双向映射的两个术语:

public class TermPair {
    private final String term1;
    private final String term2;

    public TermPair(String term1, String term2) {
        this.term1 = term1;
        this.term2 = term2;
    }

    public String getTerm1() { return term1; }
    public String getTerm2() { return term2; }

    @Override
    public String toString() {
        return "[" + term1 + ", " + term2 + "]";
    }
}

2. 实现双向映射容器

封装两个HashMap分别维护双向映射关系,保证双向查找的高效性:

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

public class BiDirectionalMap {
    private final Map<String, TermPair> term1Map = new HashMap<>();
    private final Map<String, TermPair> term2Map = new HashMap<>();

    // 添加映射,处理重复键冲突
    public void addMapping(String term1, String term2) {
        if (term1Map.containsKey(term1) || term2Map.containsKey(term2)) {
            throw new IllegalArgumentException("Term already exists in mapping");
        }
        TermPair pair = new TermPair(term1, term2);
        term1Map.put(term1, pair);
        term2Map.put(term2, pair);
    }

    public TermPair findByTerm1(String term1) {
        return term1Map.get(term1);
    }

    public TermPair findByTerm2(String term2) {
        return term2Map.get(term2);
    }
}

3. 使用示例

public class Main {
    public static void main(String[] args) {
        BiDirectionalMap map = new BiDirectionalMap();
        map.addMapping("cat", "katze");
        map.addMapping("dog", "hund");

        System.out.println(map.findByTerm1("cat")); // 输出 [cat, katze]
        System.out.println(map.findByTerm2("hund")); // 输出 [dog, hund]
    }
}

为什么不用枚举?

枚举的反向查找必须遍历所有值,时间复杂度为O(n),当映射对数量较多时性能会明显下降。而双HashMap方案的正反向查找都是O(1)复杂度,效率更高,同时支持动态添加映射(枚举是静态不可变的)。如果是固定映射,也可以在类初始化时一次性加载所有数据,同样能保证查找效率。

内容的提问来源于stack exchange,提问作者midnight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:40:44