数组的大小不可以改变,那集合的大小可以改变嘛?集合的底层不也是数组的扩容嘛?

数组的大小不可以改变,那集合的大小可以改变嘛?集合的底层不也是数组的扩容嘛?

数组的大小是固定的,定义的时候就确定了
集合的大小是动态的,可根据需要自动调整
个人理解集合是对数组的一个封装,提供更高层的接口,使得数组大小可以根据需要进行调整,并保证数据准确完整

集合的大小是可变的,其实集合的大小只是集合的一个属性而已。
拿ArrayList举例
他会记录你当时已经使用的数组的长度,标记为size,初始为0。
数组实际为elementData,比如申请了10个,那就是Object[10],初始是null.

那你每次add的时候,先判断size+1 是否比elementData的最大长度大,也就是和10比,不够就要扩容,变成1.5倍。也就是15
然后再size++

所以数组本身是不可变的,只不过是集合简化了开发的操作,省去了记录size和扩容的工作。

我们表面的看到的集合大小的可变性就是对数组的复制操作,当数组内的数据到达设定的扩容阈值的时候,会触发扩容操作,其实就是把现在的数组的数据复制到一个更大的数组中去。