覆盖HashSet的Contains方法

4

请问如何覆盖HashSet的contains()方法,使用正则表达式匹配而不是equals()?

如果不能覆盖,请问如何添加一个方法来使用正则表达式模式?基本上,我想在包含字符串的HashSet上运行正则表达式,并且需要使用正则表达式来匹配子字符串。

如果我的方法不适合,请提出其他建议。

谢谢。 :)

2个回答

5
您可以通过以下方式扩展HashSet:
public class RegExHashSet extends HashSet<String > {
    public boolean containsRegEx( String regex ) {
        for( String string : this ) {
            if( string.matches( regex ) ) {
                return true;
            }
        }
        return false;
    }
}

然后您可以使用它:

RegExHashSet set = new RegExHashSet();
set.add( "hello" );
set.add( "my" );
set.add( "name" );
set.add( "is" );
set.add( "tangens" );

if( set.containsRegEx( "tan.*" ) ) {
    System.out.println( "it works" );
}

你能否提供一个关于如何扩展HashSet的完整代码,并从扩展类中初始化一个HashSet的示例? - Inf.S
5
如果假设不会使用实际的.contains()方法,那么这个要求在插入时进行哈希处理的O(n)操作是多余的。此时,使用ArrayList更为合适。 - Robert Fraser
一个ArrayList可以允许多个相同对象的实例。如果您使用Set,则可能只想在其中有一个对象实例。 - tangens
实际上,我需要的是包含的值。然而,我希望它能与正则表达式匹配,而不仅仅使用equals()方法。另外,我只想要一个对象实例在其中。在这种情况下,我只想要每个字符串的一个实例。 - Inf.S

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接