我读过很多文章说使用大型数组是非常低效的。(特别是因为数组的维数是16x16x3x3),我想知道是否有任何方法可以以不同的方式存储字符串值(我将它们用作ID值),以节省内存或减少读取时间。如果您有任何想法或方法,我将不胜感激。谢谢!
发布于 2012-03-22 06:58:28
好吧,如果你的矩阵是满的,也就是说每个元素都包含数据,那么我相信一个数组是最有效的。但是如果你的矩阵是稀疏的,你可以考虑使用更多基于链接的数据类型。
我要做的第一件事是不使用字符串作为I,而是使用整数。它会大大减小你的结构的尺寸。
而且,这个数组真的不是那么大,如果这是你唯一的数据结构,我不会担心效率。它只有2304个元素大。
发布于 2012-03-22 06:57:17
请记住,字符串值与数组是分开的。无论它链接到什么字符串值,数组本身都占用相同的内存空间。访问数组中的特定地址将花费相同的时间,而不管您在该数组中保存了什么类型的对象或该对象的值是什么。
但是,如果您发现许多字符串值表示完全相同的字符串,则可以通过利用String.intern()来避免同一字符串的多个副本。如果存储中间字符串,并且没有对非中间字符串的任何其他引用,则会释放非中间字符串以进行垃圾回收。然后,您的数组将有多个条目指向相同的内存空间,而不是具有等效字符串对象的不同内存地址。
另请参阅:
根据您的ID的要求,您可能还希望考虑使用不同于字符串的数据结构。例如,虽然数组本身的大小相同,但存储int值将避免为每个单独的条目分配额外空间。
而且,4维数组可能不是最适合您需求的数据结构。您能描述一下为什么选择这种数据结构来表示您想要表示的内容吗?
发布于 2012-03-22 07:02:43
首先,16*16*3*3 = 2304 -真的很谦虚。在这种大小下,我更担心4D数组可能造成的混乱,而不是它所占用的大小!
正如其他人所说,如果它完全填充,则数组是可以的。如果它有差距,ArrayList或类似的会更好。
如果字符串只是ID,为什么不存储枚举(甚至是整数)而不是字符串呢?
https://stackoverflow.com/questions/9814026
复制相似问题