3

我有一个 HashMap,其键为 id,值为文本:

HashMap<String,String> textMap = new HashMap<String,String>();
textMap.put("id_1","She");
textMap.put("id_2","has");
textMap.put("id_3","a"); 
textMap.put("id_4","neck");
textMap.put("id_5","pain");
//.. more elements in textMap

我想找到给定短语的相关 ID,例如“颈部疼痛”,因此在这种情况下,结果应该是 id_4 和 id_5。

任何人都可以建议一种有效的算法来将短语与 id 匹配吗?

对不起,我忘了包括一个重要条件。我有短语和单词的偏移量,比如“start_5_end_14”,这意味着 5 应该是“neck”的开头,因为“She”的开头是 0。但是,使情况复杂化的是偏移量可能不正确。

4

3 回答 3

5

维护一个反向映射,在其中将单词映射到 id。然后,遍历你的短语并调用短语reversedTextMap.get(word)中的每一个word

于 2012-10-23T23:01:09.780 回答
3

您可以使用Guava 库中的BiMap

BiMap<String,String> textMap  = HashBiMap.create();

    textMap.put("id_1","She");
    textMap.put("id_2","has");
    textMap.put("id_3","a"); 
    textMap.put("id_4","neck");
    textMap.put("id_5","pain");
    BiMap<String,String> idToText = textMap.inverse();

    System.out.println(idToText.get("neck")); 
    System.out.println(idToText.get("pain"));

如果您有重复的值,那么您可以使用MultiMap

于 2012-10-23T23:05:26.363 回答
1

由于您可以对多个键具有相同的值,因此您可以使用Multimap来表示值与键的关系。您将使用:

Collection<V>   get(K key) 

从一个值开始检索 id 列表。

于 2012-10-23T23:08:19.233 回答