是否有一种数据类型比 String 使用更少的存储空间来存储 2 个字母?
Is there a datatype that uses less storage for 2 letters than String?
基本上就是标题所说的。我知道如果我只有一个字母,我可以使用 char 作为类型,但我需要 2 个字母的数据类型,例如 "XY"。有没有使用更少存储空间(位)或小于字符串的东西?还是多个字母通常只是保存为字符串?谢谢!
不,不可能
这就是为什么::
String s = "ab" // 仅使用 4 个字节的数据,因为每个字符保留 2 个字节
其他数据类型除了short和byte外都使用>=4个字节但是这里short和byte不能存储字符
如果您确定没有使用更高的 unicode 字符(即使用超过 1 个字符来存储的字符),则有几个选项:
如@rdas 所述,您可以使用数组:char[2]
。这会比 String 更节省内存,因为 String 有额外的成员。如果它只是 ASCII 字符,你甚至可以使用 byte[2]
.
因为1个字符是16位,2个字符是32位,所以也可以尝试将2个字符编码成1个int,因为这样也只使用32个字节,你不会有数组的对象开销。显然,当您需要将存储的信息显示为实际字符时,这需要一些额外的步骤 encode/decode,例如当呈现给用户时。
如果你的字符只是ASCII码,即每个字符都适合1个字节,你甚至可以把它放在一个short中。
根据您实际需要支持的双字符组合的数量,您实际上可以枚举所有可能的组合,使用查找 Map 或排序数组,然后只存储 number/index 的代码。同样,根据组合的数量,使用字节、short 或 int。
基本上就是标题所说的。我知道如果我只有一个字母,我可以使用 char 作为类型,但我需要 2 个字母的数据类型,例如 "XY"。有没有使用更少存储空间(位)或小于字符串的东西?还是多个字母通常只是保存为字符串?谢谢!
不,不可能
这就是为什么:: String s = "ab" // 仅使用 4 个字节的数据,因为每个字符保留 2 个字节
其他数据类型除了short和byte外都使用>=4个字节但是这里short和byte不能存储字符
如果您确定没有使用更高的 unicode 字符(即使用超过 1 个字符来存储的字符),则有几个选项:
如@rdas 所述,您可以使用数组:
char[2]
。这会比 String 更节省内存,因为 String 有额外的成员。如果它只是 ASCII 字符,你甚至可以使用byte[2]
.因为1个字符是16位,2个字符是32位,所以也可以尝试将2个字符编码成1个int,因为这样也只使用32个字节,你不会有数组的对象开销。显然,当您需要将存储的信息显示为实际字符时,这需要一些额外的步骤 encode/decode,例如当呈现给用户时。
如果你的字符只是ASCII码,即每个字符都适合1个字节,你甚至可以把它放在一个short中。
根据您实际需要支持的双字符组合的数量,您实际上可以枚举所有可能的组合,使用查找 Map 或排序数组,然后只存储 number/index 的代码。同样,根据组合的数量,使用字节、short 或 int。