Java HashMap put 方法不起作用

标签 java hashmap

我试图做一个练习,创建一个 PhoneBook使用HashMap .
不过我看到了我的addPhone方法不会将新手机添加到我的 PhoneBook pbdata.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();
    }
}

最佳答案

您提供的名称是 data.containsValue(name) 的键,而不是值。
如果您想根据类的客​​户端的键返回值,您需要的是 Map.containskey() 。

请注意,不需要处理映射中的存在,因为返回 null 因为键不存在映射:

public String getPhone(String name){       
     return data.get(name);      
}
<小时/>

旁注

不是问题中的问题,而是要处理的任何问题。
ToString() 对于方法来说确实不是一个好名字:

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

方法名称区分大小写,是的,但是为 Object.toString 定义稍微不同的命名(这里是 T 大写)并不是一个公平的理由() 方法。它使代码阅读产生误导。
此外,你的方法什么也不返回。所以这是无奈的:pb.ToString();

您应该声明的是:

@Override
public String toString(){
    return data.toString();
}

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

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

System.out.println(pb);

关于Java HashMap put 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322906/

相关文章:

java - ArrayList自定义类作为HashMap键

java - 如何使用通用 HashMap 的过滤方法 - Java

java - 如何使用 Java 8 迭代 Map 以获得重复字符键的字符串

java - 以 Map 作为键的 WeakHashMap 在修改键后返回空值的意外行为

java - 从控制台的一行读取整数和字符串

java - 解析 XML 时出错 : junk after document element - The markup in the document following the root element must be well-formed

java - 我可以将字符串转换为具有泛型类型的列表吗?

java - 使用 java 从 .xsd 创建 .xml 文件

java - 我在哪里可以找到 AS400 到 Java 的接口(interface)?

java - 无法让我的 for 循环给我 HashMap 中最不常见的字母