[英]Difference between ArrayList.TrimToSize() and Array?
通常,他们说我们出于以下原因从Array移到ArrayList
数组是固定大小的,而数组列表则不是。
ArrayList的缺点之一是:
当达到其容量时,ArrayList变为其实际大小的3/2。 结果,如果我们没有正确利用空间,内存可能会浪费掉。在这种情况下,首选数组。
如果我们使用ArrayList.TrimSize(),将使Array List成为一个一致的选择吗? 消除唯一的优势(固定大小)阵列比它有优势吗?
一个简短的答案是:trimToSize不能解决所有问题,因为在数组增长之后缩小数组-不同于首先阻止增长; 前者的成本是复制+垃圾回收。
更长的答案是:int []是低级的,ArrayList是高级别的,这意味着它更方便,但对细节的控制较少。 因此,在面向业务的代码中(例如,操作“产品”的简短列表),我将更喜欢ArrayList,这样我就可以忽略技术性并专注于业务。 在面向数学的代码中,我可能会选择int []。
还有其他细微的差异,但我不确定它们与您的相关性如何。 例如,并发性:如果您同时从多个线程更改ArrayList的数据,则将有意失败,因为这是大多数业务代码的直观要求。 一个int []将允许您做任何您想做的事情,由您自己来确定是否有意义。 同样,这些都可以概括为“低级” ...
如果您正在开发对内存至关重要的应用程序,则还需要可调整大小,并且可以权衡性能,那么修剪数组列表是您的最佳选择。 这是唯一一次带有修剪的数组列表的一致选择。
在其他情况下,您实际正在执行的操作是:
因此,您会发现,为了保持列表容量和大小不变,我们会承担很多性能开销。 固定大小在这里没有提供任何优势,只是节省了很少的额外空间,这在现代机器中几乎不是问题。
简而言之,如果您希望在不编写大量样板代码的情况下实现可调整性,那么数组列表是一致的选择。 但是,如果大小从不改变,并且您不需要任何动态功能(例如删除操作),那么数组是更好的选择。 很少有额外的字节几乎不是问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.