can*_*eed 5 java collections contains
我目前有一个包含三个字符串 ( "car", "two dollar", "foo")的 Set 。然后我对通过的HashMap<String, Double>.
if (getSet().contains(currentHashMapItem.getKey()) == true) {
System.out.println(currentHashMapItem.getKey());
}
Run Code Online (Sandbox Code Playgroud)
第一个键是"car",按预期匹配并显示。但是,第二个键是"dollar",但不显示。现在我对 contains 如何工作的理解是,如果它正在比较的字符串存在于 中返回的 Set 中,它将返回 true getSet(),但没有骰子。甚至尝试了一个ArrayList<String>也没有运气。以前有人遇到过这个吗?我是否试图切得太尖,并被迫使用正则表达式或迭代器循环?
问题是你的Set不包含“美元”而是“两美元”。因此它包含一个包含密钥但不直接包含密钥的字符串。由于该Set.contains()方法使用.equals(),除非密钥相同,否则这将失败。
您可以遍历这组键并查看是否有String.contains()您的键。
作为附加选项,您可以使用Set自己的contains()方法(覆盖或重载当前方法)创建一个新类,该方法使用String.contains()比较方法而不是.equals(). 这可以通过三种方式完成:
实现Set接口
- 方便,可以简单地使用选项重载boolean contains(Object)方法boolean contains(String)(另请参阅使用AbstractSet类)
组合
- 允许使用不同类型Set(例如HashSet、TreeSet等),而不是更通用的接口
继承
- 与组合类似,但不太优雅和合适的选择
- 仅当您有其他原因想要子类时才这样做
| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |