当前位置: 技术问答>java相关
Vector的问题。
来源: 互联网 发布时间:2017-04-01
本文导语: Vector初始的对象容纳量是10,如果对象数量增加,容量就会加倍,...... 但是看到一本书上这样说: //原文如下: Vector vt = new Vector(100); //定义初始容量为100 例如,如果你再刚才定义的Vector对象中最终存储了...
Vector初始的对象容纳量是10,如果对象数量增加,容量就会加倍,......
但是看到一本书上这样说:
//原文如下:
Vector vt = new Vector(100); //定义初始容量为100
例如,如果你再刚才定义的Vector对象中最终存储了7000个对象,那么实际它的
空间却可以容纳12800个对象。如果每个对象引用占4字节,那么这样会多占20kb的
内存。
//结束
老大们:我存7000个对象引用,怎么会到12800呢??请指教
但是看到一本书上这样说:
//原文如下:
Vector vt = new Vector(100); //定义初始容量为100
例如,如果你再刚才定义的Vector对象中最终存储了7000个对象,那么实际它的
空间却可以容纳12800个对象。如果每个对象引用占4字节,那么这样会多占20kb的
内存。
//结束
老大们:我存7000个对象引用,怎么会到12800呢??请指教
|
如是是加倍就是
初始100>>200>>400>>800>>1600>>3200>>6400>>12800
7000比6400大,所以就要12800了,不知道真实系统的是不是这么加倍的.
觉得这样加倍方式不大好.
初始100>>200>>400>>800>>1600>>3200>>6400>>12800
7000比6400大,所以就要12800了,不知道真实系统的是不是这么加倍的.
觉得这样加倍方式不大好.
|
哎,说来话长,其实Vector里面是用Object[]来存放对象的,默认情况下new Vector()时Object[]的长度为10,增长量为0,new Vector(100)时,长度为100,增长量也为0,当new Vector(100, 20)时,Object[]的长度为100,增长量为20。如果我们不断的addElement(),Object[]肯定容量不够,当发生这种情况时,Vector就会首先new一个长度更大的Object[],其长度具体有多大随后再说,然后把旧Object[]里的对象一个一个的复制到新Object[]里,最后再把当前正发生addElement()的对象也放到最后边,这样,我们只管addElement()就行了,大可放心去写程序,不用担心里面的细节。再说新Object[]的长度是怎样确定的:当增长量为0时,新长度是旧长度的2倍,当增长量为>0时,新长度=旧长度+增长量。到这就完全明白了吧!所以,楼主可以new Vector(7000,1),这样存7000个对象引用,一个也不会多浪费。可是,还有一个矛盾:当我增长量定得很小比如1时,如果经常发生Object[]容量不足,那么就惨了,每次都要重新new Object[],然后还要一个一个地复制,性能可就差了。所以,用Vector时,如果可能的总容量不是很大比如