字符串匹配的效率,Equals vs. Matches方法

时间:2016-05-05 10:42:29

标签: 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

这两种方法都给了我想要的结果,但是我想知道哪一种方法在高容量处理时会更有效。

2 个答案:

答案 0 :(得分:4)

您可以通过使用大量字符串并在循环中比较它们来自行检查。在循环之前和之后,您将获取当前系统时间,然后获取开始和结束时间的差异。见这里:Runtime。但是你应该小心,因为你的硬件结果可能会有所不同。同样重要的是要了解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

答案 1 :(得分:1)

  

匹配可能会更慢,因为它在后台使用java.util.regex.Pattern和java.util.regex.Matcher。 equals和compareTo都使用一个简单的循环,因此应该更快。

在此处找到答案:http://www.coderanch.com/t/487350/Performance/java/compare-strings