Java中Vector和ArrayList的区别

来源:互联网 发布:盟拓软件 编辑:程序博客网 时间:2024/06/06 05:21

Vector

首先Vector和ArrayList实现了List接口。
Vector出现的版本是1.0,是一个线程安全的类,Vector在1.2之后拥有了ArrayList的所有功能,Vector拥有很多独有方法(ArrayList出现之前),下面列举几个:

void addElement(E obj)           将指定的组件添加到此向量的末尾,将其大小增加 1void setElementAt(E obj, int index)           将此向量指定 index 处的组件设置为指定的对象。 boolean removeElement(Object obj)           从此向量中移除变量的第一个(索引最小的)匹配项。 void removeElementAt(int index)           删除指定索引处的组件。 

等等这些都是Vector对元素的操作,更多具体的请查看API。
Vector还拥有特有的迭代方法,直接上代码:

        Enumeration<String> elements = vector.elements();        while(elements.hasMoreElements()){            String str=elements.nextElement();        }

ArrayList

ArrayList出现在1.2版本,ArrayList 是Vector 的替代类,重效率轻安全。
下面是ArrayList的一些方法(Vector在1.2之后已拥有):

boolean add(E e)           将指定的元素添加到此列表的尾部。 E set(int index, E element)           用指定的元素替代此列表中指定位置上的元素。 E remove(int index)           移除此列表中指定位置上的元素。 

等等,还有ArrayList的迭代方式为(当然Vector也可用):

        Iterator<Book> iterator=list.iterator();        while(iterator.hasNext()){            Book b=iterator.next();            }        }

Vector和ArrayList的小结

相同点:
1. 底层都是使用数组实现。
2. 都是List的子类
不同点(主要关注):
1. 出现的版本不同,Vector 是1.0出现的。ArrayList是1.2出现的。
2. Vector 是一个线程安全的容器,对元素的操作效率相比ArrayList 要低。 ArrayList 是一个线程非安全的 。效率要更高一些。
3. Vector 类中包含了一些独有的对元素操作的方法。都是比较老的版本了。
4. 初始容量(调用空参数的构造器时)和扩容规则不同。
ArrayList的断点测试:

    public static void main(String[] args) {        List<String> list=new ArrayList<>();        list.add("1");        list.add("2");        list.add("3");        list.add("4");        list.add("5");        list.add("6");        list.add("7");        list.add("8");        list.add("9");        list.add("10");        list.add("11");    }

这里写图片描述

这里写图片描述

这里写图片描述

可见调用空参构造器时,ArrayList的初始容量为0,当添加第一个元素时,容量变为10,当超过10个元素时,容量变为原来的1.5倍(即10*1.5=15当然是取整)。

Vectord的断点测试:

    public static void main(String[] args) {        Vector<String> vector=new Vector<>();        vector.addElement("hello1");        vector.addElement("hello2");        vector.addElement("hello3");        vector.addElement("hello4");        vector.addElement("hello5");        vector.addElement("hello6");        vector.addElement("hello7");        vector.addElement("hello8");        vector.addElement("hello9");        vector.addElement("hello10");        vector.addElement("hello11");    }

这里写图片描述

这里写图片描述
可见Vector的初始容量为10(调用空参构造器),扩容规则为现有容量的2倍。

原创粉丝点击