包含未在 List 或 Set 中找到部分字符串

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>也没有运气。以前有人遇到过这个吗?我是否试图切得太尖,并被迫使用正则表达式或迭代器循环?

Riv*_*ver 2

问题是你的Set不包含“美元”而是“两美元”。因此它包含一个包含密钥但不直接包含密钥的字符串。由于该Set.contains()方法使用.equals(),除非密钥相同,否则这将失败。

您可以遍历这组键并查看是否有String.contains()您的键。

作为附加选项,您可以使用Set自己的contains()方法(覆盖或重载当前方法)创建一个新类,该方法使用String.contains()比较方法而不是.equals(). 这可以通过三种方式完成:

实现Set接口
- 方便,可以简单地使用选项重载boolean contains(Object)方法boolean contains(String)(另请参阅使用AbstractSet类)

组合
- 允许使用不同类型Set(例如HashSetTreeSet等),而不是更通用的接口

继承
- 与组合类似,但不太优雅和合适的选择
- 仅当您有其他原因想要子类时才这样做