字符串匹配、Equals 与 Matches 方法的效率

Mat*_*ica 2 java regex string equals

假设我必须比较 Java 中的一些字符串对象,对于一个大容量程序,我必须像这样进行一百万次。字符串要么完全相同,要么不应该算作匹配。哪种方法使用更有效,等于(对象相等)或匹配(正则表达式)?一个例子:

String a = "JACK", b = "JACK", c = "MEG";
a.equals(b);//True
a.equals(c);//False

a.matches(b);//True
a.matches(c);//False
Run Code Online (Sandbox Code Playgroud)

这两种方法都给了我想要的结果,但我想知道考虑到大量处理,哪种方法更有效。

Sup*_*upe 5

您可以通过获取大量字符串并在循环中比较它们来自己检查这一点。在循环之前和之后,您取当前系统时间,然后获得开始和结束时间的差异。请参见此处:运行时。但是您应该小心,因为结果可能因您的硬件而异。此外,了解 JVM 可能在后台进行的优化也很重要。这就是为什么您应该比较许多字符串并可能取平均值的原因

List<String> bigList = new List<String>(); // put many many values in this list
String pattern = "pattern";      
long start = System.nanoTime();

for(int i=0;i<bigList.length;i++) {
   bigList.get(i).equals(pattern); //in another program, check for matches(pattern)
}

long end = System.nanoTime();

System.out.println((end-start)/bigList.size()) // this is the average time
Run Code Online (Sandbox Code Playgroud)