Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

      • 简介
      • MapUtil
      • MapBuilder
      • MapJoiner
      • MapGetUtil
      • CaseInsensitiveMap
      • CamelCaseMap
      • BiMap
        • 功能介绍
        • 主要特性
        • 适用场景
        • 使用示例
          • 示例1:基本用法
          • 示例2:反转Map
          • 示例3:处理重复值
          • 示例4:判断值是否存在
        • 注意事项
        • 方法列表
      • FixedLinkedHashMap
      • ForestMap
      • Dict
      • MultiValueMap
      • ListValueMap
      • SetValueMap
      • Table
      • SoftConcurrentMap
      • WeakConcurrentMap
      • WeakKeyConcurrentMap
      • ConcurrentLinkedHashMap
    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • Map(map)
Hutool
2026-01-19
目录

BiMap

# 功能介绍

BiMap是Hutool中提供的双向Map实现,它支持根据键查找值,同时也支持根据值查找键。BiMap确保值的唯一性,因此可以安全地进行双向查找,是处理一对一映射关系的理想选择。

# 主要特性

  • 支持双向映射,根据键查找值和根据值查找键
  • 确保值的唯一性,避免重复值导致的歧义
  • 支持反转Map,获取值到键的映射
  • 基于HashMap实现,性能优异
  • 支持所有Map接口方法
  • 支持null键和null值,但null值只能出现一次
  • 线程不安全,建议在单线程环境下使用

# 适用场景

  1. 需要双向映射的场景,如枚举映射、编码映射等
  2. 需要根据值快速查找键的场景
  3. 需要确保值唯一性的场景
  4. 处理一对一关系的数据
  5. 如国家代码与国家名称的映射、用户ID与用户名的映射等

# 使用示例

# 示例1:基本用法

// 创建BiMap
BiMap<String, String> biMap = new BiMap<>();

// 添加键值对
biMap.put("CN", "China");
biMap.put("US", "United States");
biMap.put("JP", "Japan");

// 根据键查找值(与普通Map相同)
String china = biMap.get("CN");
// 输出: China

// 根据值查找键(BiMap特有功能)
String cn = biMap.getKey("China");
// 输出: CN

// 遍历BiMap
biMap.forEach((key, value) -> {
    Console.log(key + "=" + value);
});
// 输出:
// CN=China
// US=United States
// JP=Japan

# 示例2:反转Map

BiMap<String, String> biMap = new BiMap<>();
biMap.put("CN", "China");
biMap.put("US", "United States");

// 反转Map,获取值到键的映射
BiMap<String, String> inverseMap = biMap.inverse();

// 使用反转后的Map
String cn = inverseMap.get("China");
// 输出: CN

String us = inverseMap.get("United States");
// 输出: US

# 示例3:处理重复值

BiMap<String, String> biMap = new BiMap<>();

// 添加第一个键值对
biMap.put("CN", "China");

// 尝试添加重复值,会抛出IllegalArgumentException
// biMap.put("CN2", "China"); // 抛出异常

// 可以使用forcePut()方法强制替换
biMap.forcePut("CN2", "China");
// 此时,biMap中的映射为 {CN2=China, US=United States}

# 示例4:判断值是否存在

BiMap<String, String> biMap = new BiMap<>();
biMap.put("CN", "China");
biMap.put("US", "United States");

// 判断值是否存在
boolean containsChina = biMap.containsValue("China");
// 输出: true

boolean containsJapan = biMap.containsValue("Japan");
// 输出: false

# 注意事项

  1. BiMap是线程不安全的,在多线程环境下使用需要额外同步
  2. BiMap确保值的唯一性,添加重复值会抛出IllegalArgumentException
  3. 可以使用forcePut()方法强制替换重复值
  4. 支持null键和null值,但null值只能出现一次
  5. 反转后的BiMap是原BiMap的视图,修改原BiMap会影响反转后的BiMap
  6. 性能与HashMap相当,适合大多数场景

# 方法列表

BiMap继承自HashMap,除了支持所有Map接口方法外,还提供了以下特有方法:

方法名 描述 参数 返回值
getKey(V value) 根据值查找键 value: 值 K
inverse() 反转Map,获取值到键的映射 无 BiMap<V, K>
forcePut(K key, V value) 强制添加键值对,替换重复值 key: 键, value: 值 V
containsValue(Object value) 判断值是否存在 value: 值 boolean
put(K key, V value) 添加键值对,值必须唯一 key: 键, value: 值 V
putAll(Map<? extends K, ? extends V> map) 批量添加键值对,所有值必须唯一 map: 要添加的Map void
remove(Object key) 移除键值对 key: 键 V
clear() 清空BiMap 无 void
CamelCaseMap
FixedLinkedHashMap

← CamelCaseMap FixedLinkedHashMap→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式