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