HashSet包含子字符串

时间:2013-10-16 15:06:54

标签: java

我有一个字符串HashSet,格式为:something_something_name="value"

Set<String> name= new HashSet<String>();

在我的代码中,我想检查HashSet中是否包含字符串"name"。在这个小例子中,如果我正在检查"name"是否是HashSet中任何值的子字符串,我希望它返回true。

我知道.contains()无效,因为它使用.equals()。关于处理这个问题的最佳方法的任何建议都会很棒。

4 个答案:

答案 0 :(得分:4)

使用现有的数据结构,唯一的方法是迭代检查每个条目的所有条目。

如果这还不够好,你需要一个不同的数据结构。

答案 1 :(得分:0)

您可以保留另一个地图,其中name是键,something_something_name是值。 因此,您可以从名称 - &gt;移动something_something_name - &gt;值。如果你想要一个单独的接口,你可以围绕这两个地图编写一个包装类,公开你想要的功能。

答案 2 :(得分:0)

您可以按如下方式构建地图(名称 - &gt;字符串):

 Map<String, List<String>> name_2_keys = new HashMap<>();
 for (String name : names) {
     String[] parts = key.split("_");
     List<String> keys = name_2_keys.get(parts[2]);

     if (keys == null) {
         keys = new ArrayList<>();
     }
     keys.add(name);
     name_2_keys.put(parts[2], keys);
 }

然后检索包含名称name的所有字符串:

 List<String> keys = name_2_keys.get(name)

答案 3 :(得分:0)

我不久前发布了MapFilter课程here

您可以像以下一样使用它:

MapFilter<String> something = new MapFilter<String>(yourMap, "something_");
MapFilter<String> something_something = new MapFilter<String>(something, "something_");

您需要先将容器变为Map

如果您多次查找子字符串,这只会值得做。