通常,他们说我们已经从Array移动到ArrayList以获得以下原因
数组是固定大小的,而不是数组列表。
ArrayList的一个缺点是:
当达到它的容量时,ArrayList变为它的实际大小的3/2。因此,如果我们不能正确利用空间,可能会浪费内存。在这种情况下,首选数组。
如果我们使用ArrayList.TrimSize(),那会使Array List成为一致的选择吗?消除了唯一的优势(固定大小)数组已超过它?
答案 0 :(得分:0)
一个简短的答案是:trimToSize并不解决所有问题,因为数据在增长后收缩 - 与首先阻止增长不同;前者有复制+垃圾收集的费用。
答案越长:int []为低级别,ArrayList为高级别,这意味着它更方便,但对细节的控制较少。因此,在面向业务的代码中(例如,操作"产品"的简短列表),我更喜欢ArrayList,这样我就可以忘记技术细节并专注于业务。在面向数学的代码中,我可能会选择int []。
还有其他细微差别,但我不确定它们与您的相关性如何。例如。并发:如果同时从多个线程更改ArrayList的数据,它将故意失败,因为这是大多数业务代码的直观要求。 int []将允许您做任何您想做的事情,由您决定是否有意义。同样,这可以概括为"低水平" ...
答案 1 :(得分:0)
如果您正在开发极其内存关键型应用程序,还需要可调整性并且性能可以被折衷,那么修剪数组列表是您最好的选择。这是唯一一次,带有修剪的数组列表将是一致的选择。
在其他情况下,您实际做的是:
所以你看,我们为了保持列表容量和大小相同而产生大量性能开销。固定尺寸不会为您提供任何有利的优势,除了节省更多的额外空间,这在现代机器中几乎不是问题。
简而言之,如果您想要在不编写大量样板代码的情况下进行可调整性,那么数组列表是一致的选择。但是如果大小永远不会改变并且您不需要任何动态功能,例如删除操作,那么数组是更好的选择。几乎没有额外的字节是一个问题。