Java HashMap put方法不起作用

Eli*_*ahu 0 java hashmap

我正在尝试做一个创建PhoneBook使用的练习HashMap.
但是我看到我的addPhone方法没有添加新手机到我的PhoneBook pbie data.put(name, num);方法里面我addPhone没有把数据放进去HashMap data.

有人可以解释我这里有什么问题吗?

UPD 现在我明白这是一个错误,我用的是containsValue方法而不是containsKey.很简单!
但是这个问题与建议的现有问题完全不相似.我并没有要求Is checking for key existence in HashMap always necessary?我知道HashMap根据关键或价值进行搜索的方法.这个问题实际上是由一个错误引起的.但是我在这里收到了非常广泛和有用的答案.我相信这些答案,特别是davidxxx的答案非常好,可能对很多人有用.

import java.util.HashMap;


public class PhoneBook {

        private HashMap<String, String> data;

        public PhoneBook() 
        { 
            data = new HashMap<String, String>(); 
        } 
        public void addPhone(String name, String num) 
        { 
            data.put(name, num); 
        }


        //a
        public String getPhone(String name){
            if(data.containsValue(name)){
                return data.get(name);
            }
            else 
                return null;
        }

        //b
        public void ToString(){
            data.toString();
        }

        public static void main(String[] args) {

            PhoneBook pb = new PhoneBook();
            pb.addPhone("shlomi", "12312413yuioyuio24");
            pb.addPhone("shlomi1", "1231345345241324");
            pb.addPhone("shlomi2", "12312445735671324");
            System.out.println(pb.getPhone("shlomi"));
            System.out.println(pb.getPhone("blat"));
            pb.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

dav*_*xxx 7

您提供的是名称,data.containsValue(name)而不是值.如果您想根据班级客户端的密钥返回值,
您需要的是Map.containskey().

请注意,null由于不存在键的映射,因此不需要处理映射中的存在,因为它不存在.

public String getPhone(String name){       
     return data.get(name);      
}
Run Code Online (Sandbox Code Playgroud)

边注

不是问题中的问题,而是要处理的问题.
ToString()对于一个方法来说真的不是一个好名字:

public void ToString(){
    data.toString();
}
Run Code Online (Sandbox Code Playgroud)

方法名称区分大小写,是的,但使用它来定义与方法略有不同的命名(此处为T大写)并不是一个公平的理由Object.toString().它使代码阅读误导.
此外,您的方法什么都不返回.所以这很无奈:pb.ToString();

你应该声明的是:

@Override
public String toString(){
    return data.toString();
}
Run Code Online (Sandbox Code Playgroud)

添加添加@Override了一个编译约束,用于检查方法是否在层次结构中定义.

现在,您可以通过这种方式在标准输出中写入对象的toString()表示PhoneBook:

System.out.println(pb);
Run Code Online (Sandbox Code Playgroud)