学习java不看点源码,怎么能说你学过java呢!
这一章,我过一下简单的ArrayList源码,学习源码先从简单入手吧。哈哈,像Spring、SpringBoot等以后再看,简单入手,循序渐进吧,别着急,……
那我们先开始ArrayList这个源码吧!
(这家伙,上来就扔一张图,你也太随意了吧。哈哈,没办法,我也不会写文章,就这样将就着看吧,弄看懂就行!)看到这个我们就会看到这个
DEFAULT_CAPACITY = 10,也就是说ArrayList的默认的初始化是10。EMPTY_ELEMENTDATA = {}就是空数组了。
接下来,应该关心是啥?知道了初始的容量,那么扩容是怎么扩容的?
这里面就可以看出来新的容量是oldcapacity+(oldCapacity >> 1)也就是说扩容后是原来的1.5倍,下面的判断如果最小容量小于10,则容量为默认的容量10.
接下来一个问题就是ArrayList是线程不安全的,那么为什么他是线程不安全的呢?我们看一下源码add():
这个modCount++;如果是高并发的情况下,同一个位置有没有可能被覆盖,或者size不对应等情况产生?这也许就是ArrayList线程不安全的原因之一。相对ArrayList的线程安全是Vector,其实大家去看一下源码就知道了,这两者最大的不同就是vector的方法都有synchronized同步锁修饰,虽然线程安全了,但是性能却降低了不少。
其他的就是ArrayList的一些方法,可以看看。