我简单说一下集合中的ArrayList吧!!!
ArrayList:是一个底层依赖数组实现的可扩容的集合,我觉得它和数组的区别就是一个可以动态扩容,一个是固定的大小,因为它的底层是数组实现,所以它操作的时候是通过下标来进行的,是一个有序的集合。
ArrayList的扩容机制是:通过1.5倍来进行扩容的,默认的大小是10,当它的存储数量超过十个的时候,它会调用它底层的一个方法grow(),这个方法会进行三个操作,一个是当前这个集合的长度,然后将这个长度除以二再加上这个长度,这里 的除以二是用的移位运算符(>>),而不是我们正常的数学计算的那样直接除以二,接着判断是否真的需要扩容(grow方法会传过来一个最小容量的参数),如果需要扩容的话再判断这个准备扩容的长度是否超过了最大扩容的长度,如果没有就将原来的数组拷贝到一个新的数组中,长度则为我们刚刚计算出来的长度。
这里呢我之前没有看底层代码的时候,我有一个误区,比如它第一次扩容是从10扩容到15,那第二次扩容是按照原来的10进行二次扩容,扩容到20还是按照15进行扩容(现在想想感觉有点傻),最后我们看到这里的扩容是将数据拷贝到一个新的数组中,所以它进行扩容的时候是比较耗费性能的,所以当我们要插入大量的数据的时候,最好可以直接指定ArrayList的大小,这样可以节省我们电脑的压力,所以大家都知道为什么使用ArrayList在新增、删除的时候会比较慢了吧!