【问题标题】:ContainsValue vs equals method TreeMapContainsValue 与 equals 方法 TreeMap
【发布时间】:2019-12-14 09:41:33
【问题描述】:

我想打印从扫描仪对象到达这里的选定键和值。我以这种方式尝试过,我发现了一个不同之处:

    TreeMap<String, String> oldbooks = new TreeMap<String,String>();
    oldbooks.put("WaltDisney", "DonaldDuck");
    oldbooks.put("Shakespeare", "Amleto");
    oldbooksput("Dickens", "OliverTwist");

    Scanner in = new Scanner(System.in);
    String title = in.next();
    boolean found =             oldbooks.containsValue(title);
    for(String k : oldbooks.keySet())
    {
        if(found) {
            System.out.print("The value is : "+ oldbooks.get(k)
            +" The Key is: "+ k);
        }
    }

我注意到,通过这种方式,我获得了每个键和每个值,我想要正确的键和正确的值。如果我改变我的 if 条件并输入:

if(title.equals(oldbooks.get(k))

现在它运行得很好。那么为什么我不能用第一个解决方案打印指定的值和键呢?我知道 .equals 给了我真假,就像 containsValue 一样。 提前谢谢你。

【问题讨论】:

  • 您弄错了示例代码中的键和值。
  • 但是为什么我不能在 containsValue 中打印任何内容?
  • 因为地图不包含标题(作为值!)
  • 顺便说一句,我会遍历oldbooks.entrySet()
  • @dan1st 标题是我从扫描仪对象获得的字符串。如果我只是将“TheManintheMoon”放在标题位置,我将一无所获。我试着理解你的意思,标题是一个不在地图中的字符串,但在 if 条件中是相同的 (title.equals(oldbook.get(k)) 或者我忘记了什么?提前谢谢你

标签: java dictionary collections key treemap


【解决方案1】:

根据您的编辑,您将值放在不同的地图archivio 中,并尝试在不同的地图oldbooks 中搜索它。

这是故意的吗?或者这可能是您代码中的问题!

下面的代码对我来说工作正常;

    TreeMap<String, String> oldbooks = new TreeMap<>();
    oldbooks.put("WaltDisney", "DonaldDuck");
    oldbooks.put("Shakespeare", "Amleto");
    oldbooks.put("Dickens", "OliverTwist");

    Scanner in = new Scanner(System.in);
    String title = in.next();
    boolean found = oldbooks.containsValue(title);
    for(String k : oldbooks.keySet())
    {
        if(found) {
            System.out.print("The value is: "+ oldbooks.get(k)
            +" The Key is: "+ k);
        }
    }

当我在我的 IDE 中运行它时,我只需在控制台中输入 DonaldDuck 即可获得预期的结果(打印所有键值对)。

另外,仅供参考,您在 system.out.print 语句中打印了不正确的键值。
键是k,值是使用oldbooks.get(k) 得到的值。不是反过来。 (正如@dan1st 在第一条评论中指出的那样)。

【讨论】:

  • @dan1st 我只想要 DonaldDuck 的键和值,而不是所有键和值。如果我尝试使用 if(title.equals(oldbooks.get(k)) 我会获得正确的值和键
  • 我当然会。我现在明白你的问题标题是什么意思了。 containsValue 方法只会检查您要查找的值是否在地图中。它不会提示值是“DonaldDuck”的索引。这就是为什么我的答案中的代码总是返回地图中所有索引的键值,如果found 为真。您使用 equals 编写的 if 条件仅在该 k 索引项的值等于您在地图中使用 for 循环进行迭代时查找的值时才返回 true。
猜你喜欢
  • 1970-01-01
  • 2013-06-04
  • 2011-09-24
  • 2023-03-28
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多