正则表达式的性能优化
正则表达式在 JDK 1.4 版本中引入,是许多应用程序中广泛使用的一个功能。所以,正则表达式在 rope 中执行良好至关重要。在 Java 语言中,正则表达式用 Pattern 表示。要将 Pattern 与 CharSequence 的区域匹配,要使用模式实例构建 Matcher 对象,将 CharSequence 作为参数传递给 Matcher。
操纵 CharSequence 可为 Java 的正则表达式库提供极佳的灵活性,但也带来了一个严重的缺陷。CharSequence 只提供了一个方法来访问它的字符:charAt(x)。就像我在概述一节中提到过的,在拥有许多内部节点的 rope 上随机访问字符的时间大约为 O(log n),所以遍历时间为 O(n log n)。为了演示这个缺陷带来的问题,我测评了在长度为 10,690,488 的字符串中寻找模式 “Crachit*” 的所有实例所花费的时间。所用的 rope 是使用插入测评的同一个变换序列构建的,深度为 65。表 6 显示了测评的结果。