首页 > 试题广场 >

ArrayList和Vector主要区别是什么?

[单选题]
ArrayList和Vector主要区别是什么?
  • Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步
  • Vector与ArrayList一样,也是通过数组实现的,不同的是ArrayList支持线程的同步
  • Vector是通过链表结构存储数据,ArrayList是通过数组存储数据
  • 上述说法都不正确
推荐
答案:A
Vector支持线程的同步,也就是内部加锁的
但是效率低,因此在新版jdk中加入线程不安全的Arraylist
编辑于 2015-01-10 21:33:17 回复(3)
Vector & ArrayList 的主要区别
1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。
2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。
      如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。

扩展知识

1. Hashtable & HashMap
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。


2. ArrayList & LinkedList

ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:   
       从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

发表于 2016-04-16 09:38:42 回复(20)
Vector与ArrayList一样,也是通过数组实现的   这说法有问题把,  Vector是数组实现,但是ArrayList是通过数组链表实现的, 能说也么???
发表于 2016-07-26 21:53:24 回复(3)
vector是线程安全的,可以同步访问,Arraylist不是
发表于 2015-11-05 09:08:52 回复(0)
A
发表于 2015-09-19 23:15:01 回复(0)
Vector支持线程同步,其实现原理是在方法中加入关键字synchronized从而在线程A访问A方法时线程B等待,但在并发下影响效率所以引入ArrayList,其方法中不加锁,牺牲安全性换来效率。
发表于 2015-11-05 11:29:54 回复(0)
选A
发表于 2018-07-12 10:26:51 回复(0)
Vector在Java早期就出现了,ArrayList是在Java1.2才开始出现的。
它们的相同点是,都是数组实现的,所以都维护着插入的顺序,初始默认长度都是10.
它们的不同点有:
1.Vector是线程安全的,ArrayList是线程不安全的,所有Vector的效率要比ArrayList的效率要低。
2.Vector的增加长度时,变为原来的2倍,ArrayList变为原来的1.5倍,如果1.5倍以后长度还是不够,就会设置长度为所需的空间。
3.Vector其实并不常用,ArrayList更加使用,为了获得线程安全的集合可以使用Collections里的sychronizedCollection(Collection c)获得
发表于 2017-10-24 19:10:02 回复(0)
ArrayList  Vector  LinkedList三者的区别与联系:
ArrayList:(1)底层数据结构是数组,查询快,增删慢;(2)线程不安全,效率高。
Vector:(1)底层数据结构是数组,查询快,增删慢;(2)线程安全,效率低;
LinkedList:(1)底层数据结构是链表,查询慢,增删快;(2)线程不安全,效率高;
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个是指向前一个元素,另一个是指向后一个元素。

以上是个人的观点,能力有限,不足之处还忘见谅。
发表于 2018-03-30 08:56:35 回复(0)
ArrayList 和Vector都继承自List.是时候祭出桌面的这张Java集合类的前世今生父子关系图了
发表于 2018-03-16 01:42:16 回复(8)
Vector是远古时代的产物,那时候的集合类都是线程安全的,值得一提的是Stack是继承Vector的,也是线程安全的。
发表于 2016-07-10 10:25:20 回复(0)

    ArrayList, LinkedList, Vector的区别是什么?

  • ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小
  • LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问

  • Vector: 可以看作线程安全版的ArrayList

    

1. String, StringBuilder, StringBuffer的区别是什么?

  • String: 不可变的字符序列,若要向其中添加新字符需要创建一个新的String对象

  • StringBuilder: 可变字符序列,支持向其中添加新字符(无需创建新对象)

  • StringBuffer: 可以看作线程安全版的StringBuilder

  •  Map, Set, List, Queue、Stack的特点及用法。
    • Map<K, V>:  Java中存储键值对的数据类型都实现了这个接口,表示“映射表”。支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。

    • Set<E>: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上的“集合”。它所支持的核心操作有add(E e),remove(Object o)contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否存在于集中。

    • List<E>: Java中集合框架中的列表类型都实现了这个接口,表示一种有序序列。支持get(int index)add(E e)等操作。

    • Queue<E>: Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E element)remove()等操作。

    • Stack<E>: Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数据结构。支持push(E item)pop()等操作。

        更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法导论》或其他相关书籍。
  • HashMap和HashTable的区别

    • HashTable是线程安全的,而HashMap不是

    • HashMap中允许存在null键和null值,而HashTable中不允许

编辑于 2017-08-23 15:01:58 回复(1)
在相对于ArrayList来说,Vector线程是安全的,也就是说是同步的
发表于 2016-01-31 22:07:21 回复(0)
Vector &amp; ArrayList 的主要区别 1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。 2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。       如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。 扩展知识: 1. Hashtable &amp; HashMap Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。 2. ArrayList &amp; LinkedList ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:           从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
编辑于 2022-02-28 10:22:18 回复(0)
Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步!!
发表于 2021-03-15 17:47:57 回复(0)
ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。
编辑于 2019-09-10 19:32:40 回复(0)
ArrayList  Vector  LinkedList三者的区别与联系:
ArrayList:(1)底层数据结构是数组,查询快,增删慢;(2)线程不安全,效率高。
Vector:(1)底层数据结构是数组,查询快,增删慢;(2)线程安全,效率低;
LinkedList:(1)底层数据结构是链表,查询慢,增删快;(2)线程不安全,效率高;
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个是指向前一个元素,另一个是指向后一个元素。

以上是个人的观点,能力有限,不足之处还忘见谅。
发表于 2019-07-12 07:58:29 回复(0)
Vector & ArrayList 的主要区别 1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。 2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。       如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。 扩展知识: 1. Hashtable & HashMap Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。 2. ArrayList & LinkedList ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:           从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
发表于 2017-03-20 00:44:26 回复(0)
同为数组实现,但是vector内部采用加锁实现,因此效率比较低
发表于 2022-11-29 09:06:09 回复(0)
vector也是用数组实现的,不同的是vectir支持线程同步
发表于 2022-11-07 15:50:01 回复(0)
Vector & ArrayList 的主要区别 1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。 2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。       如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。 扩展知识: 1. Hashtable & HashMap Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。 2. ArrayList & LinkedList ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:           从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
发表于 2022-10-20 13:46:44 回复(0)