在各种Java面试题中,想必大家是有见到过Vector这个类吧。一般都是说Vector是同步的这个点。
不过今天我要说的不是这个,而是Vector类中的capacity方法。
先看看下面这段关于Vector类中的capacity方法的代码。
这段代码中使用了Vector类的三个方法,add方法、size方法和capacity方法。add方法、size方法大家经常用就不多说了,那capacity方法是干什么的呢。
capacity单词的意思是容量、容积。这个方法的意思就是获取Vector类对象的容量。
拿上面代码的执行结果来解释一下吧。
我这里实例化是使用的默认的构造方法,大家可以看一下源码,默认的构造方法中,给这个对象设置的初始容量是10。那就是说这个Vector类对象(一个动态数组)初始化后可以放10个元素。
然后执行的结果就会输出size是0(因为一个元素都没有存入),而容量就是上面说的10。
这时候执行add方法存入一个元素,于是输出的size就是1了,容量不会改变,还是10。
那如果存入的元素操作10个呢,就需要自动扩容了。就是上面的第三组自行结果了,当存入的元素操作之前的容量时,容量扩容到了20。
那这个扩容的规则是什么呢。看一看源码便知了。
add方法中调用了ensureCapacityHelper
ensureCapacityHelper调用了grow
grow方法是扩容的实现
其中capacityIncrement是扩容增量,public Vector(int initialCapacity, int capacityIncrement)这个构造方法可以指定,默认扩容增量为0.
从grow方法中我们可以看到,如果增量不为0,则每次容量不足时按照增量去增加容量。如果增量为0,则每次容量不足时会将当前容量翻倍。
今天的关于Vector类中的capacity方法的内容就到这里了。