①继承不一样。数组
public class Hashtable extends Dictionary implements Map安全
public class HashMap extends AbstractMap implements Map数据结构
②多线程
Hashtable 中的方法是同步的,而HashMap中的方法在缺省状况下是非同步的。在多线程并发的环境下,能够直接使用Hashtable,可是要使用HashMap的话就要本身增长同步处理了。并发
③spa
Hashtable中,key和value都不容许出现null值。线程
在HashMap中,null能够做为键,这样的键只有一个;能够有一个或多个键所对应的值为null。当get()方法返回null值时,便可以表示 HashMap中没有该键,也能够表示该键所对应的值为null。所以,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。指针
④两个遍历方式的内部实现上不一样。对象
Hashtable、HashMap都使用了 Iterator。而因为历史缘由,Hashtable还使用了Enumeration的方式 。继承
⑤
哈希值的使用不一样,HashTable直接使用对象的hashCode。而HashMap从新计算hash值。
⑥
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增长的方式是 old*2+1。HashMap中hash数组的默认大小是16,并且必定是2的指数。
①两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,均可以按位置索引号取出某个元素,而且其中的数据是容许重复的,这是HashSet之类的集合的最大不一样处,HashSet之类的集合不能够按索引号去检索其中的元素,也不容许有重复的元素。
②同步性,Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不一样步的。若是只有一个线程会访问到集合,那最好是使用ArrayList,由于它不考虑线程安全,效率会高些;若是有多个线程会访问到集合,那最好是使用Vector,由于不须要咱们本身再去考虑和编写线程安全的代码。
③数据增加:ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就须要增长ArrayList与Vector的存储空间,Vector默认增加为原来两倍,而ArrayList的增加策略在文档中没有明确规定(从源代码看到的是增加为原来的1.5倍)。ArrayList与Vector均可以设置初始的空间大小,Vector还能够设置增加的空间大小,而ArrayList没有提供设置增加空间的方法。
① ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
② 对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。
③对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据