Если у меня есть лексикографически отсортированный список строк Java [s1,s2,s3,s4, ...., sn]
, а затем преобразование каждой строки в массив байтов с использованием кодировки UTF-8 bx = sx.getBytes("UTF-8")
, является ли список массивов байтов [b1,b2,b3,...bn]
также лексикографически отсортированным?
Сохраняет ли Java String.getBytes (UTF-8) лексикографический порядок?
Ответы (2)
Да. Согласно RFC 3239:
Порядок лексикографической сортировки байтовых значений строк UTF-8 такой же, как если бы они были упорядочены по номерам символов. Конечно, это представляет ограниченный интерес, поскольку порядок сортировки, основанный на количестве символов, почти никогда не является допустимым с культурной точки зрения.
Как указал Ян Робертс, это относится к «true UTF-8 (например, String.getBytes
даст вам)», но остерегайтесь DataInputStream
фальшивая UTF-8, которая будет сортировать [U+000000] после [U+000001 ] и [U+00F000] после [U+10FFFF].
String.getBytes
даст вам), но не обязательно для модифицированная кодировка UTF-8, используемая DataInputStream
и друзьями.
- person Ian Roberts; 16.08.2012
Вы получаете список/массив объектов X в заданном порядке.
Вы создаете новый список/массив Y таких объектов, применяя метод.
Y будет иметь порядок, в котором вы его создали (обычно вы просто сохраняете порядок X). Переупорядочивания не происходит.
Кроме того, лексикографический порядок для byte[] не имеет смысла.