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()