java - ContainsValue 与 equals 方法 TreeMap
问题描述
我想打印从扫描仪对象到达这里的选定键和值。我以这种方式尝试过,我注意到了一个区别:
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 一样。先感谢您。
解决方案
根据您的编辑,您将值放在不同的地图中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在第一条评论中指出的那样)。
推荐阅读
- azure - Runbook 自动化失败,但 powershell cmd 行工作正常
- docker - PhpStorm 2019.3.4 External Tools 输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”
- c++ - 多级继承和访问属性
- wordpress - woocommerce get_order_report_data 使用元键的日期过滤器
- excel - 如何在多列之间使用唯一性,而不计算某些分隔符?
- java - 通过 JNI 将 ByteBuffer 从 Java 传递到 C++
- sql - 在 Azure 管道中针对多个数据库运行 SQL
- php - 当页面在 php/html 中刷新时,我如何从不同的 url 中随机选择一个图像没有 javascript
- python-3.x - 在两个熊猫数据框之间映射列值
- c# - WPF-Combobox中Tooltip的双向绑定