正则表达式搜索hashset

时间:2017-03-20 09:34:01

标签: java regex hashset

有没有办法使用正则表达式搜索Set内的String?
例如,我想在哈希集中搜索AAA * B,并期望结果AAAAB,AAB等。

如果没有这样的东西,你会建议使用什么而不是散列集?

这是如何像sql一样搜索数据的类似问题?

2 个答案:

答案 0 :(得分:2)

HashSet肯定不会让你到任何地方。它专为非常有效的精确查找而设计,但对模糊查找完全没用,因为它没有任何范围或接近度的概念。

没有支持此类搜索的标准数据结构。 您可以使用NavigableSet接口(TreeSet作为标准实现)自己实现此功能的一部分。

但理想情况下,您需要使用类似Radix tree的东西,它不是标准的Java数据结构。

当然,您仍然可以使用HashSet以强制方式实现它,迭代所有条目并根据您的模式检查每个条目。但是你的性能将是O(n)而不是O(1),因此使用HashSet没有任何好处(除了消除重复),你也可以使用ArrayList。

答案 1 :(得分:0)

肯定你可以但不能开箱即用......你可以在一个过滤器中组合Streams和regex:

例如,假设你有一个f字符串,你需要/只需要那些不是数字的字符串:

Set<String> languages = new HashSet<>(Arrays.asList("0", "java", "c++", "1234", "1999"));
Set<String> resultFilteredLanguages = languages.stream().filter(line -> !line.matches("\\d+")).collect(Collectors.toSet());
resultFilteredLanguages.forEach(System.out::println);