当前位置: 首页 > 知识库问答 >
问题:

对于相同的字符串,HashMap containsKey总是返回false

欧阳鸿德
2023-03-14

我正在解析一个文件,其中有城市名和到其他城市的距离,格式如下:

"San Antonio" 
"San Francisco" 
Washington 

"San Francisco"--Weed [305]
"San Francisco"--"Wisconsin Dells" [2189]
Washington--"San Jose" [2909]

我认为问题在于,当我分割字符串时,它创建了不同的对象,并且由于某种原因,string.equals和/或hashcode()给出了不同的结果。因此,map.get(key)返回空值。但我不知道如何解决这个问题。

public class spanning {
private static HashMap<String, HashMap<String, Integer>> map = new HashMap<String, HashMap<String, Integer>>();
public static void main(String[] args) throws IOException {
    BufferedReader read = new BufferedReader(new FileReader(args[0]));
    String temp;
    while ((temp = read.readLine()) != null) {
        if (temp.contains("[")) {
            String[] parts = temp.split("--");
            String[] parts2 = parts[1].split(" \\[");
            Scanner scan;
            scan = new Scanner(parts2[1]).useDelimiter("\\D");
            int o = scan.nextInt();
            map.get(parts[0]).put(parts2[0], o);
        } else {
            map.put(temp, new HashMap<String, Integer>());

        }
    }
    System.out.println("Finished!");
}

}

共有1个答案

时宾实
2023-03-14

我运行了您的代码,下面是当它到达打印“finished”的行时的映射:

map = {HashMap@634}  size = 4
 0 = {HashMap$Node@640} "" -> " size = 0"
 1 = {HashMap$Node@641} ""San Antonio"" -> " size = 0"
  key = ""San Antonio""
  value = {HashMap@647}  size = 0
 2 = {HashMap$Node@642} ""San Francisco"" -> " size = 2"
  key = ""San Francisco""
  value = {HashMap@649}  size = 2
   0 = {HashMap$Node@654} "Weed" -> "305"
   1 = {HashMap$Node@655} ""Wisconsin Dells"" -> "2189"
 3 = {HashMap$Node@643} "Washington" -> " size = 1"
  key = "Washington"
  value = {HashMap@651}  size = 1
   0 = {HashMap$Node@662} ""San Jose"" -> "2909"

到底是什么问题?你看到地图的值是什么了吗?

 类似资料:
  • 问题内容: 我正在Mac上使用Eclipse IDE(版本:3.4.2),但遇到了以下问题。 使用equal()或equalsIgnoreCase()方法在字符串之间进行比较时,即使字符串相等,我也会收到false。例如,即使values [0] =“ debug_mode”,以下代码也将以下条件视为false: 这是以下循环的一部分: 我尝试使用并获得了相同的结果。有人知道为什么吗? 问题答案:

  • 我在JQuery的AJAX请求中发现了一个回显值的有趣问题,但我没有为它提供一个answare: 如果你需要更多的信息告诉我!我希望任何人都知道是什么导致了这个问题!

  • 我正在制作一个应用程序,如果用户已经登录,我希望应用程序自动从文本文件登录。目前,在文本文件中,我有与数据库条目匹配的“alex|ppp”。以下方法首先调用 我已经仔细检查了user和Pass的值,它们是“alex”和“ppp”,这是预期的。下一个初始文件被调用,这是相关代码: 一旦我调用db.tryLogin()就会出现问题,它看起来像这样 我已经检查过了,dbPass从数据库返回的“ppp”与

  • 问题内容: 我在某处读到,函数应始终仅返回一种类型,因此以下代码被视为错误代码: 我想更好的解决方案是 返回None然后创建一个新的空元组不是更便宜的内存明智的选择吗?或者即使在较大的项目中,这种时差也太小而无法引起注意? 问题答案: 为什么函数应该返回一致类型的值?满足以下两个规则。 规则1-函数具有“类型”-输入映射到输出。它必须返回一致的结果类型,否则它不是函数。一团糟。 从数学上讲,我们说

  • 我目前正在研究一种从特定网站中提取数据的解决方案(使用css选择器从网站的html表中返回价格列表)。为了做到这一点,我决定使用HtmlUnit库,因为我看到它支持很多特性。在我完成代码并针对同一页面(使用相同的搜索参数)进行测试后,我认为我已经完成了,但在为多个页面启动多个线程后,一切都发生了变化。问题是,基本上下面的代码总是为所有线程返回相同的旧页面,我根本不理解这种行为: 我使用同一个网站,

  • 问题内容: 我有以下二维位图: 出于好奇,我想检查一下,如果它将使用整数而不是布尔值,它将占用多少空间。所以我检查了当前大小并得到 104 之后,我修改了 但仍然有 104 然后我决定看看仅用字符串我就能得到多少: ,仍然显示 104 这看起来很奇怪,因为我期望字符串列表列表浪费大量的内存,而不仅仅是布尔值。 显然我缺少有关getsizeof如何计算大小的信息。谁能解释我为什么得到这样的结果。 P