假设我必须在Java中比较一些字符串对象,对于高容量程序,我必须做一百万次。字符串要么完全相同,要么不算作匹配。哪种方法使用效率更高,等于(对象相等)或匹配(正则表达式)?一个例子:
String a = "JACK", b = "JACK", c = "MEG";
a.equals(b);//True
a.equals(c);//False
a.matches(b);//True
a.matches(c);//False
这两种方法都给了我想要的结果,但是我想知道哪一种方法在高容量处理时会更有效。
答案 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