Java 是否有一个地图可以向我提供双向散列?

Java 是否有一个地图可以向我提供双向散列?,java,hashmap,Java,Hashmap,我拿着下面的地图 Map<Integer, List<String>> Map 当我向某个int添加一个新字符串时,我只是将其添加到映射中该int值的列表中。 现在,我还需要将其从上次所在的列表中删除。 我将阐述一下: 它不是字符串的同一个实例。我得到一个int和一个字符串,我需要添加它,并将其从包含相同字符串值的映射中的前一个列表中删除 这意味着我需要保存另一个字符串到整数的映射? 我需要维护两个集合吗? 谢谢。您可以尝试使用 您可以尝试使用 这有点像B

我拿着下面的地图

      Map<Integer, List<String>>
Map
当我向某个int添加一个新字符串时,我只是将其添加到映射中该int值的列表中。
现在,我还需要将其从上次所在的列表中删除。
我将阐述一下:
它不是字符串的同一个实例。我得到一个int和一个字符串,我需要添加它,并将其从包含相同字符串值的映射中的前一个列表中删除

这意味着我需要保存另一个字符串到整数的映射?
我需要维护两个集合吗?

谢谢。

您可以尝试使用

您可以尝试使用

这有点像BiMap,但由于你们的关系是不对称的(一个
int
指的是
字符串的
列表,而一个
String
只能指一个
int
),这不是一个完美的mtach

我觉得你好像想要两张地图,第一张是你的
地图
,第二张是
地图
。当然,你会想在课堂上封装这个。添加新字符串的步骤如下:

  • 如果
    映射中有
    字符串的条目
    • 从该列表中获取整数
    • 使用它从
      映射中查找
      列表
      ,并从中删除
      字符串
  • 字符串
    添加到
    地图中的相关
    列表
  • 添加一个条目,将
    字符串
    映射到
    映射中的
    整数

  • 它有点像BiMap,但由于您的关系是非对称的(一个
    int
    指的是
    字符串的
    列表,而一个
    String
    只能指一个
    int
    ),因此它不是一个完美的mtach

    我觉得你好像想要两张地图,第一张是你的
    地图
    ,第二张是
    地图
    。当然,你会想在课堂上封装这个。添加新字符串的步骤如下:

  • 如果
    映射中有
    字符串的条目
    • 从该列表中获取整数
    • 使用它从
      映射中查找
      列表
      ,并从中删除
      字符串
  • 字符串
    添加到
    地图中的相关
    列表
  • 添加一个条目,将
    字符串
    映射到
    映射中的
    整数

  • 请参见@User:尽管标题相似,但该链接描述了
    int
    字符串之间的1:1关系。如果我读对了上面的内容,它不是1:1,
    int
    指的是
    字符串的
    列表
    。@user:See:See@user:虽然标题相似,但该链接描述了
    int
    字符串之间的1:1关系。如果我读对了上面的内容,它不是1:1,
    int
    指的是
    字符串的
    列表
    。@user:另请参见:只需向OP提一个简短的问题。您确定所有字符串都是唯一的吗?两个不同的整数可以映射到同一个字符串吗?在这种情况下,这是行不通的。@Kaj:在问题中,他说“当我向某个int添加一个新字符串时,我只是将它添加到地图中该int值的列表中。现在,我还需要将它从它所在的上一个列表中删除。”我认为这很清楚。int到字符串的方向非常清楚,但这并不能说明字符串在整个地图上是否唯一。我对OP的数据一无所知。但是如果1映射到“foo”,42映射到“foo”,那么这将失败。它适用于int->string,但不是相反,除非字符串在整个地图上是唯一的。@Kaj:他特别说,当添加字符串“到某个int”时,他“…还需要[s]将其从其所在的最后一个列表中删除。”这告诉我们,
    字符串
    最多可以与一个
    int
    相关。好吧,再加上他接受了答案我知道他接受了答案,我也知道你的答案很可能是100%正确的。只是想确保他将来不会遇到麻烦,因为他没有考虑所有的字符串是否都是唯一的。他说“给某个int添加一个新字符串”。这对我来说只是意味着该字符串对于该int是新的。它并没有说它还没有映射到另一个int。只需向OP提一个简短的问题。你确定所有的字符串都是唯一的吗?两个不同的整数可以映射到同一个字符串吗?在这种情况下,这是行不通的。@Kaj:在问题中,他说“当我向某个int添加一个新字符串时,我只是将它添加到地图中该int值的列表中。现在,我还需要将它从它所在的上一个列表中删除。”我认为这很清楚。int到字符串的方向非常清楚,但这并不能说明字符串在整个地图上是否唯一。我对OP的数据一无所知。但是如果1映射到“foo”,42映射到“foo”,那么这将失败。它适用于int->string,但不是相反,除非字符串在整个地图上是唯一的。@Kaj:他特别说,当添加字符串“到某个int”时,他“…还需要[s]将其从其所在的最后一个列表中删除。”这告诉我们,
    字符串
    最多可以与一个
    int
    相关。好吧,再加上他接受了答案我知道他接受了答案,我也知道你的答案很可能是100%正确的。只是想确保他将来不会遇到麻烦,因为他没有考虑所有的字符串是否都是唯一的。他说“给某个int添加一个新字符串”。这对我来说只是意味着这个字符串对于那个int是新的。它并没有说它还没有被映射