黑马程序员技术交流社区

标题: 关于ArrayList可变长度的问题 [打印本页]

作者: 冯佩    时间: 2013-1-22 23:32
标题: 关于ArrayList可变长度的问题
本帖最后由 张向辉 于 2013-1-24 09:34 编辑

看教程知道ArrayList替代了Vector,ArrayList的数组结构是默认以50%长度延长的,而Vector则默认以100%长度延长,有什么方法或代码可以直观地演示出这种延长呢?
作者: ︶ㄣ布丁    时间: 2013-1-23 03:36
Capacity  获取或设置 System.Collections.ArrayList 可包含的元素数
Count    获取 System.Collections.ArrayList 中实际包含的元素数。

作者: 高浩    时间: 2013-1-23 15:04
可以通过Size方法啊,
ArrayList是为了提高效率而出现的,它是线程不安全的,
而Vector是线程安全的但效率不高。
作者: Rancho_Gump    时间: 2013-1-24 09:49
︶ㄣ布丁 发表于 2013-1-23 03:36
Capacity  获取或设置 System.Collections.ArrayList 可包含的元素数
Count    获取 System.Collections.Ar ...

找了半天也没找到这两个类  还是我的版本问题哦
作者: yong230    时间: 2013-1-24 11:14
Capacity  获取或设置 System.Collections.ArrayList 可包含的元素数
Count    获取 System.Collections.ArrayList 中实际包含的元素数。
上面的回答是误导,Vector对象才有capacity()方法,ArrayList对象有才size()方法,ArrayList 根本没有Capacity 属性和Count属性
作者: 王晓明    时间: 2013-1-24 22:26
你这个问题我前几天看到了,也回去想了许久,但是一直想不到解决方法!后来返回去看了一下API文档,我是这么认为的:
ArrayList是50%扩容,Vector是100%扩容的,但是ArrayList是同步!Vector非同步的!要是比较他们的扩容的确不好比!
但是我这么想的,我做了一个不需要同步的小测试,都是写入一个很大的数组,就可以看出Vector的扩容是比ArrayList快的!
  1. import java.util.ArrayList;
  2. import java.util.Vector;

  3. public class Demo1 {
  4.         public static void main(String[] args) {
  5.                 ArrayList<Object> arr = new ArrayList<Object>();
  6.                 Vector<Object> vec = new Vector<Object>();
  7.                 long start1 = System.currentTimeMillis();
  8.                 for (int i = 0; i < 10000000; i++) {
  9.                         arr.add(i);
  10.                 }
  11.                 long end1 = System.currentTimeMillis();
  12.                 System.out.println("ArrayList的用时是"+(end1-start1)+"毫秒");
  13.                
  14.                
  15.                 long start2 = System.currentTimeMillis();
  16.                 for (int i = 0; i < 10000000; i++) {
  17.                         vec.add(i);
  18.                 }
  19.                 long end2 = System.currentTimeMillis();
  20.                 System.out.println("Vector的用时是"+(end2-start2)+"毫秒");
  21.         }
  22. }
复制代码
以上是我的想法与测试,不知道是否合适!但是我认为还是能够比较出两者的扩容的区别的!你还可以把数组调的更大!效果更明显!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2