黑马程序员技术交流社区

标题: 请问 这几个用法方面有什么区别? [打印本页]

作者: wangyuyus    时间: 2013-11-20 13:02
标题: 请问 这几个用法方面有什么区别?
ArrayList和Vector的区别,HashMap和Hashtable的区别

作者: dztg016383    时间: 2013-11-20 13:19
Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
作者: zy888802    时间: 2013-11-20 14:23
|--->ArrayList(JDK1.2):底层的数据结构是数组数据结构,特点是查询速度快(因为带角标),
         但是增删速度稍慢,因为当元素多时,增删一个元素则所有元素的角标都得改变
         线程不同步。默认长度是10,当超过长度时,按50%延长集合长度。      
|--->Vector(JDK1.0):底层数据结构是数组数据结构.特点是查询和增删速度都很慢。
      默认长度是10,当超过长度时,按100%延长集合长度。
      线程同步。
      (Vector功能跟ArrayList功能一模一样,已被ArrayList替代)
|--->HashTable(JDK1.0):
  底层是哈希表数据结构;
  不可以使用null键和null值;
  用作键的对象必须实现hashCode和equals方法来保证键的唯一性
  线程同步,效率低
|--->HashMap(JDK1.2):
  底层是哈希表数据结构;
  允许使用null键和null值;
  线程不同步,效率高;
  保证元素唯一性的:


作者: 王雷1    时间: 2013-11-20 15:55
ArrayList和Vector的区别:
1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
2.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

HashMap和Hashtable的区别:
1,HashMap不是线程安全的,hastmap是一个接口是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。
2,HashTable是线程安全的一个Collection,HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。






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