【发布时间】:2012-02-20 14:47:17
【问题描述】:
我正在阅读有关在已排序的字符串数组中搜索(范围)字符串的内容。
上面写着:
如果要查找所有以“h”开头的字符串,可以运行 对字符串“h”和“h\uFFFF”进行二进制搜索。这给了所有 所有以“h”开头的键的波段索引。请注意,一个 二进制搜索可以返回字符串所在的索引,即使 它实际上不在数组中。
我不明白这一段的任何内容。
什么是h\uFFFF 它如何帮助/在二分搜索中使用,最后一句话是否也意味着即使这个搜索也是错误的?
请帮助理解这里所说的内容?
【问题讨论】:
-
\uFFFF是 unicode 字符的最大值,不用作可打印字符 -
'\uFFFF' 是代码点 U+FFFF 的转义序列,the stanard 保证它不是字符。在您正在阅读的其他地方是否定义了它的某些特殊用途?
-
@Sam Dehaan: "\uFFFF 是 unicode 字符的最大值"...自从 Unicode 3.1 以来,有超过 65 536 个代码点和一个 Java char 不足以表示新的代码点。例如,Unicode 字符“MUSICAL SYMBOL G CLEF”的 Unicode 代码点为 0x0001D11E(远大于 0xFFFF),需要两个 Java char 来表示:“\uD8334\uDD1E”。这个 SNAFU 源于 Java(以及它的 char 原始类型)是在 Unicode 3.1 出现之前定义的。总之:不,\uFFFF 绝对是 NOT Unicode 代码点的最大值。
标签: java string performance algorithm binary-search