Java hashset中的正则表达式搜索

Java hashset中的正则表达式搜索,java,regex,hashset,Java,Regex,Hashset,有没有办法用正则表达式搜索集合中的字符串 例如,我想在哈希集中搜索AAA*B,并期望得到结果AAAAB、AAB等。。 如果没有这样的东西,您建议使用什么来代替哈希集? 这是一个类似于如何像sql一样搜索数据的问题 HashSet肯定不会帮你什么忙。它是为非常有效的精确查找而设计的,但对于模糊查找完全没有用处,因为它没有任何范围或接近度的概念 没有支持这种搜索的标准数据结构。 您可以通过使用接口(TreeSet是标准实现)自己实现此功能的一部分 但理想情况下,您需要使用类似于的东西,这不是标准的

有没有办法用正则表达式搜索集合中的字符串
例如,我想在哈希集中搜索AAA*B,并期望得到结果AAAAB、AAB等。。

如果没有这样的东西,您建议使用什么来代替哈希集?


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

HashSet肯定不会帮你什么忙。它是为非常有效的精确查找而设计的,但对于模糊查找完全没有用处,因为它没有任何范围或接近度的概念

没有支持这种搜索的标准数据结构。 您可以通过使用接口(TreeSet是标准实现)自己实现此功能的一部分

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


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

当然,您可以但不能开箱即用……您可以在筛选器中组合流和正则表达式:

例如,假设您有一组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);
Set languages=新的HashSet(Arrays.asList(“0”、“java”、“c++”、“1234”、“1999”);
设置resultFilteredLanguages=languages.stream().filter(line->!line.matches(\\d+)).collect(Collectors.toSet());
resultFilteredLanguages.forEach(System.out::println);

据我所知,java中没有任何类似list的内置运算符。您可以做的最接近的事情是迭代您的结构(在您的案例集中),并为每个对象使用
匹配
方法。看看下面的链接可能会对你有所帮助。它看起来和你想要的一样。它可能是重复的。