为什么数组列表动态增加而不是动态减少

ume*_*esh 4 java collections

我有一个简单的疑问,Arraylist增加了它的大小,因为它已经满了因子(2,1.5或old_capacity*3/2 +1或者什么),并在其中添加新元素.那么,如果数量被某个因素删除,为什么不动态地减小它的大小.就像我在arraylist中有10000个元素并且在特定时间删除所有元素时,现在只有100个元素在数组列表中它仍然保存10000个对象内存.为什么我必须调用trimTosize()或其他东西?为什么不是他们自动?我错过了什么 .. ?请不要告诉我该怎么做,我想知道为什么要这样做?谢谢

Hei*_*bug 6

那么,如果数量被某个因素删除,为什么不动态地减小它的大小.

出于性能原因.分配内存总是一项昂贵的操作.不解除分配的逻辑是,如果您的数据结构已达到给定的大小,即使您删除了元素,那么它将来可能会再次达到该大小.

解除分配也可能也很昂贵(这取决于实现,但通常是真的.请参阅realloc for C),因为您可能需要释放先前分配的内存的整个块,然后为调整大小的结构重新分配新的块.