Есть ли тип данных, который использует меньше памяти для 2 букв, чем строка? - PullRequest
0 голосов
/ 13 октября 2019

В основном то, что говорит название. Я знаю, что я мог бы использовать char как тип, если бы у меня была только одна буква, но мне нужен тип данных для 2 букв, например, "XY". Есть что-нибудь, что использует меньше памяти (бит) или меньше, чем строка? Или несколько букв обычно просто сохраняются как строки? Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Если вы уверены, что не используются символы с более высоким юникодом (т. Е. Символы, которые используют более 1 символа для хранения), есть несколько вариантов:

  • Как уже упоминалось@rdas, вы можете использовать массив: char[2]. Это было бы немного более эффективно по памяти, чем строка, поскольку строка имеет дополнительные членыЕсли это только ASCII-символы, вы можете даже использовать byte[2].

  • Поскольку один символ равен 16 битам, 2 символа являются 32-битными, поэтому можно также попытаться закодировать 2 символа в1 int, так как он также использует только 32 байта, и у вас не будет служебных данных массива. Очевидно, что для кодирования / декодирования требуются некоторые дополнительные шаги, когда необходимо отобразить сохраненную информацию в виде фактических символов, например, при представлении ее пользователю.

  • Если ваши символы представляют собой только коды ASCIIт. е. каждый символ помещается в 1 байт, вы можете даже поместить его в короткий.

  • В зависимости от количества двухсимвольных комбинаций, которые вам действительно нужно поддерживать, вы можете простоПеречислите все возможные комбинации, используйте карту поиска или отсортированный массив, а затем сохраните только номер / индекс кода. Опять же, в зависимости от количества комбинаций, используйте байты, шорты или int.

0 голосов
/ 13 октября 2019

Нет, это невозможно

Вот почему :: String s = "ab" // использует только 4 байта данных, поскольку каждый символ резервирует 2 байта

И другие типы данных используют> = 4 байта, кроме коротких и байтовых, но здесь короткие и байтовые не могут хранить символы

...