这似乎是一个相当基本的问题,我提前道歉。
我正在编写一个使用一组预定义数字的Android应用。目前我正在使用int
值,但在某些时候我可能还需要使用float
和double
值。
这些数字用于两件事。首先,我需要向用户显示它们,我需要String
(我正在创建自定义View
并在String
上绘制Canvas
)。其次,我需要在一种计算器中使用它们,显然它们必须是int
(或float
/ double
)。
由于数字是相同的,无论它们是String
还是int
,我只想存储一次(如果我需要更改任何一个,这也会减少错误;我' ll只需要在一个地方更改它们。)
我的问题是:我应该将它们存储为String
还是int
?将int
写为String
或从int
解析String
是否更快?我的直觉告诉我解析需要更多时间/资源,所以我应该将它们存储为int
s。我是对的吗?
答案 0 :(得分:6)
实际上,你的直觉可能错了(我强调可能,请参阅下面有关测量的评论)。要将字符串转换为整数,需要进行一系列乘法/加法运算。要将整数转换为字符串,需要除法/模数。很可能前者比后者更快。
但是我想指出你应该测量,而不是猜测!依赖于错误假设的算法尸体遍布着。
我还想指出,除非你的计算器每秒钟进行巨大的计算次数(而且我说数百万甚至数十亿),差别几乎可以肯定无关紧要。
在绝大多数用户交互式应用程序中,99%的计算机时间都花在等待用户做某事上。
我的建议是做一些让你的生活变得更容易作为开发人员的事情,并担心如果(并且只有)它成为一个问题。并且,为了澄清,我建议将它们存储在 native 形式(而不是字符串)中对于计算器来说是最简单的。
答案 1 :(得分:4)
我对1 000 000大小的int和String数组进行了测试。我只定时解析,结果说:
结论,你胆子错了:)!
我和其他人一起说,这不会让你的申请变慢。更好地集中精力使其更简单,更安全。
答案 2 :(得分:2)
我会说这不是真的相关。更重要的是类型安全:因为您有数字int
(或float
和double
)会强制您使用数字而不存储“任意”数据({{1}在某种程度上允许)。
答案 3 :(得分:1)
最好是做一个台架测试。写两个循环
并衡量在每次循环之前和之后获取System.currentTimeMillis()所经过的时间。
但就个人而言,如果我需要对这些数字进行计算,我会将它们存储为原始格式(int或float),我只会将它们转换为String进行显示。与执行速度问题相比,这更像是设计和可维护性的问题。专注于执行速度有时会适得其反:为了获得几μA,没有人会注意到不值得牺牲设计和稳健性(当然,当这是一个节省大量CPU时间的问题时,可能必须做出一些妥协)。 This reading may interest you
答案 4 :(得分:1)
使用计算器的人不会注意到性能差异,但正如其他人所说的那样。使用字符串作为内部表示是一个坏主意,因为在这种情况下您不会获得类型安全性。
如果您决定使用字符串,您很可能会在以后遇到维护问题。
答案 5 :(得分:0)
更好的设计实践是让用户从基础数据中获取显示的视图,而不是相反 - 在某些时候,您可能决定使用自己的绘图函数或固定图像渲染计算器,并且你的数据作为字符串会很痛苦。
话虽如此,使用现代硬件时,这些操作都不是特别耗时。
答案 6 :(得分:0)
答案 7 :(得分:0)
您正在为移动设备编写应用程序,其中内存消耗是一个巨大的交易。
存储int
很便宜,存储String
的费用很高。转到int
。
编辑:更多解释。存储int
bteween -2^31
和2^31-1
的费用为32位。无论数量是多少。将其存储在String
中,其基数为10的每位数为16位。