Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法在哈希表中查找键_Java_Hashtable_Loops - Fatal编程技术网

Java 方法在哈希表中查找键

Java 方法在哈希表中查找键,java,hashtable,loops,Java,Hashtable,Loops,我正在尝试创建一个方法,该方法通过哈希表进行迭代,并以字符串形式返回键,最好的方法是什么 编辑:从注释复制 很抱歉,如果我没有说得更清楚,我正在尝试用Java来实现这一点。我已经创建了一个测试类 public void runprog() { hashMap.put("Butter", 50); hashMap.put("Beans", 40); for (Object o: hashMap.entrySet() ) { Map.Entry entry =

我正在尝试创建一个方法,该方法通过哈希表进行迭代,并以字符串形式返回键,最好的方法是什么

编辑:从注释复制


很抱歉,如果我没有说得更清楚,我正在尝试用Java来实现这一点。我已经创建了一个测试类

public void runprog() {
    hashMap.put("Butter", 50);
    hashMap.put("Beans", 40);
    for (Object o: hashMap.entrySet() ) {
        Map.Entry entry = (Map.Entry) o;
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}
    public void runprog() {
    hashMap.put("Butter", 50);
    hashMap.put("Beans", 40);
    for (Object o: hashMap.entrySet() ) {
        Map.Entry entry = (Map.Entry) o;
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}
它输出

Butter 50 Beans 40
Butter 50
Beans 40
当我查找黄油时,它返回50当我查找豆类时,它返回50设置:

    final Object sentinal = new Object();


    Map<String, Object> map = new HashMap<String, Object>(){{
        put("key1", new Object());
        put("key2", sentinal);
    }};
给定一个值,查找其键(反向查找):

for(Map.Entry:Map.entrySet()){
if(entry.getValue()==sentinal){
System.out.println(entry.getKey());
}
}
。。。不过,如果我必须定期进行反向查找,我通常会构建一个反向映射:

    Map<Object, String> reverse = new HashMap<Object, String>();
    for(Map.Entry<String, Object> entry : map.entrySet()){
        reverse.put(entry.getValue(), entry.getKey());
    }
    System.out.println(reverse.get(sentinal));
Map reverse=newhashmap();
对于(Map.Entry:Map.entrySet()){
reverse.put(entry.getValue(),entry.getKey());
}
System.out.println(reverse.get(sentinal));

如果我没有说得更清楚,很抱歉,我正试图用Java实现这一点。 我已经创建了一个测试类

public void runprog() {
    hashMap.put("Butter", 50);
    hashMap.put("Beans", 40);
    for (Object o: hashMap.entrySet() ) {
        Map.Entry entry = (Map.Entry) o;
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}
    public void runprog() {
    hashMap.put("Butter", 50);
    hashMap.put("Beans", 40);
    for (Object o: hashMap.entrySet() ) {
        Map.Entry entry = (Map.Entry) o;
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}
它输出

Butter 50 Beans 40
Butter 50
Beans 40
我创建了一个方法,它查找一个键并返回值

public Object findValue(String Name){
    for (Object o: hashMap.entrySet()) {
        Map.Entry entry = (Map.Entry) o;
        return entry.getValue();
    }
    return null;
}
    public Object findValue(String Name){
    for (Object o: hashMap.entrySet()) {
        Map.Entry entry = (Map.Entry) o;
        return entry.getValue();
    }
    return null;
}

当我寻找黄油时,它会返回50当我寻找豆子时,它会返回50

看起来像是家庭作业,给出了示例数据(“黄油”、“豆子”)

在您的示例中,findValue每次都返回映射/表中的第一个键。您甚至没有使用您输入的密钥(名称)。下面是一个修复您的问题的示例,尽管您使用地图的方式完全错误

更好的方法是:

// assume Name is your key, ex. "Butter" 
// No need to iterate since maps are designed for lookup
Object value = map.get(Name);
您的示例已修复:

public Object findValue(String Name){
    for (Object o: hashMap.entrySet()) {
        Map.Entry entry = (Map.Entry) o;

        // THIS IS THE IMPORTANT LINE
        if(entry.getKey().equals(Name))
        {
            return entry.getValue();
        }
    }
    return null;
}

查看第二段代码,您实际上并没有在任何地方使用Name参数。因此,第一次循环时,返回条目的值——第一个值正好是50


您需要检查条目的键是否实际等于您要查找的名称…

使用for循环按值获取键不符合时间效率!!您不会从哈希表中受益

因此,由于您希望使用哈希表进行直接和反向检索,因此可以使用两个哈希表。 表1(键,值)表2(值,键)

输出


黄油


50

您想返回哪个键?到目前为止,您尝试了什么,它如何不起作用?请提供更多信息!你为什么要重复它?这是一个哈希表,通过哈希执行查找…是的,这是一个映射,只需使用像get这样的映射方法,不要浪费时间迭代它!此外,您不需要迭代内部实现。可以使用Map.keys()和Map.values()