Java 在哈希表中找到的值的返回键

Java 在哈希表中找到的值的返回键,java,arraylist,hashtable,Java,Arraylist,Hashtable,我知道如何在哈希表中找到对应键的值,但如何找到附加到特定值的键?我编写了一个函数,它循环遍历字符串并查找关键字。它很快就完成了,但我需要返回找到的那个值(关键字)的键。到目前为止,这是我的方法 public void findKeywords(POITextExtractor te, ArrayList<Hashtable<Integer,String>> listOfHashtables, ArrayList<Integer> KeywordsFound)

我知道如何在哈希表中找到对应键的值,但如何找到附加到特定值的键?我编写了一个函数,它循环遍历字符串并查找关键字。它很快就完成了,但我需要返回找到的那个值(关键字)的键。到目前为止,这是我的方法

public void findKeywords(POITextExtractor te, ArrayList<Hashtable<Integer,String>> listOfHashtables, ArrayList<Integer> KeywordsFound) {
    String document = te.getText().toString();
    String[] words = document.split("\\s+");
    int wordsNo = 0;
    int wordsMatched = 0;
    System.out.println("listOfHashtables = " + listOfHashtables);
    for(String word : words) {
        wordsNo++;
        for(Hashtable<Integer, String> hashtable : listOfHashtables) {
            //System.out.println(hashtable + " found in the document:");
            if(hashtable.containsValue(word)) {

                //<RETURN KEY OF THAT VALUE>

                wordsMatched++;
                System.out.println(word);
            }
        }
    }
    System.out.println("Number of words in document = " + wordsNo);
    System.out.println("Number of words matched: " + wordsMatched);
}
public void findKeywords(POITextExtractor te、ArrayList列表hashtables、ArrayList关键字found){
String document=te.getText().toString();
String[]words=document.split(\\s+);
int-wordsNo=0;
int字匹配=0;
System.out.println(“listOfHashtables=“+listOfHashtables”);
for(字符串字:字){
wordsNo++;
for(哈希表哈希表:列表哈希表){
//System.out.println(在文档中找到hashtable+);
if(hashtable.containsValue(word)){
//
单词匹配++;
System.out.println(word);
}
}
}
System.out.println(“文档中的字数=”+wordsNo);
System.out.println(“匹配的字数:“+wordsMatched”);
}

containsValue
无论如何都必须迭代哈希表中的所有条目,因此只需更改代码即可:

for (Map.Entry<Integer, String> entry : hashtable) {
    if (word.equals(entry.getValue()) {
        // Use entry.getKey() here
    }
}
for(Map.Entry:hashtable){
if(word.equals(entry.getValue()){
//在此处使用entry.getKey()
}
}

从这个问题的描述中,我不清楚哈希表打算表示什么,但至少有一个从整数到字符串的映射是不寻常的。你确定不想反过来吗?

containsValue
无论如何都必须迭代哈希表中的所有条目,所以只需更改代码即可因此,您可以这样做:

for (Map.Entry<Integer, String> entry : hashtable) {
    if (word.equals(entry.getValue()) {
        // Use entry.getKey() here
    }
}
for(Map.Entry:hashtable){
if(word.equals(entry.getValue()){
//在此处使用entry.getKey()
}
}

从这个问题的描述中,我不清楚哈希表打算表示什么-但至少有一个从整数到字符串的映射是不寻常的。你确定不想反过来吗?

顺便问一下,你有什么理由使用
哈希表而不是
哈希表
?后者是g通常在现代代码中更受欢迎。Jon Skeet所说的,另外我觉得也许那些哈希表应该使用单词作为键,而不是单词作为值。一些关键点。谢谢你们。我将同时更改我的代码。另一方面,哈希表比哈希表更有效吗?或者选择哈希表的原因是什么一个比另一个更有效?是的,
哈希表
更有效,因为
哈希表
向量
,而这只是为了Java的无限向后兼容性策略而保留的。@dsafasfsa
哈希表是否比哈希表更有效
?亲自探索这一点对您更有利:)顺便问一下,你有没有理由使用
Hashtable
而不是
HashMap
?后者在现代代码中通常是首选的。Jon Skeet所说的,而且我觉得也许那些Hashtable应该使用单词作为键,而不是单词作为值。一些关键点。谢谢大家。我要改变我的想法另一方面,哈希映射是否比哈希表更有效,或者选择一个哈希表而不是另一个哈希表的原因是什么?是的,
HashTable
更有效,因为
HashTable
Vector
这两种映射只在Java的无限向后兼容性策略中保留。@dsafasfsa
是H吗ashMaps比哈希表更有效
?自己探索这一点会对您更有益:)如果您为许多单词运行此函数,它可能会变得非常慢。如果每个哈希表包含每个单词一次且仅包含一次(完美双射),那么预先计算一个将单词映射到int的反向哈希表并使用它来查询单词会更有效。@MarkJeronimus:当然-我怀疑如果我们对请求的内容有更多的了解,我们会找到各种不同的方法。我是在回答一个特别提出的问题,因为我们没有更多的上下文。如果你对很多单词运行这个函数,它可能会变得非常慢。如果每个哈希表包含每个单词一次且仅包含一次(完美双射),那么预先计算一个将单词映射到int的反向哈希表并使用它来查询单词会更有效。@MarkJeronimus:当然-我怀疑如果我们对请求的内容有更多的了解,我们会找到各种不同的方法。我是在回答特别提出的问题,因为我们没有更多的背景。