代码之家  ›  专栏  ›  技术社区  ›  Miserable Variable

Map<K1,K2,V>的任何实现,即两个键?

  •  6
  • Miserable Variable  · 技术社区  · 16 年前

    我需要一张有两把钥匙的地图。

    Map2<String /*ssn*/, String /*empId*/, Employee> _employees;
    

    这样我才能

    _employees.put(e.ssn(), e.empId(), e)
    

    后来呢

    _employees.get1(someSsn);
    _employees.get2(someImpId);
    

    甚至

    _employees.remove1(someImpId);
    

    我不确定为什么我想停在两点,为什么不更多,可能是因为这就是我现在需要的情况:-)但是类型需要处理固定数量的键才能确保类型安全--类型参数不能是vararg:-)

    感谢任何关于为什么这是个坏主意的建议。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Zach Scrivena    16 年前

    我想 主要的 关键是 empId ,所以我会建立一个 Map 以此为关键。 恩皮德 ---> Employee .所有其他独特属性(例如。 ssn )将被视为 次要的 并将使用单独的 地图 s作为 恩皮德 (例如:。 ssn ---> 恩皮德 ).

    此实现使添加/删除员工变得容易,因为您只需要更改一名员工 地图 ,即。 恩皮德 ---> 受雇者 ; 其他的 地图 只有在需要时才能重建。

        2
  •  4
  •   jjnguy Julien Chastang    16 年前

    我的第一个想法是:最简单的方法就是两张地图。

    Map< String, Map< String,Employee> > _employees;
    

    但从表面上看,你只想通过SSN或ID查找员工。那么,什么能阻止你制作两个映射,或者最坏的情况下阻止一个包含两个映射的类?

    作为澄清,您是否正在寻找 复合键 员工身份是通过其SSN和ID的组合来唯一标识的,但不是一个单独标识的,或者您是否在寻找两种不同的方式来引用员工?

        3
  •  2
  •   Dónal    16 年前

    这个 Spiffy Framework 似乎能提供你想要的东西。从Javadocs:

    二维哈希映射,是一种 HashMap,使您能够参考 通过两个键而不是一个键获取值

    相关课程是 TwoDHashMap .它还提供了 ThreeDHashMap .