10.3 常见比较

  在面试时,经常会涉及相似知识点之间的比较。在平时的学习过程中,留意并区分相似技术的不同之处,可以加深对知识的掌握。本小节,将会通过几个知识的对比,抛砖引玉,希望引起大家的重视。

10.3.1 HashMap与Hashtable

  HashMap是Hashtable的轻量级实现,二者均实现了Map借口,主要有以下三点区别。

  (1)Hashtable直接继承自Dictionary抽象类,其实现原理也是基于Dictionary类的;而HashMap则是JDK1.2引进的Map接口的一个具体实现类。

  (2)Hashtable是线程安全的(同步),因此效率较低;而HashMap是线程不安全的(异步),因此效率较高。

  (3)Hashtable不允许将null作为一个entry的key或value,但HashMap允许。

10.3.2 ArrayList与LinkedList

  ArrayList是基于动态数组的数据结构,而LinkedList基于链表。

  因此,对于随机访问(get和set),ArrayList的效率高于LinkedList;而对于增加和删除操作(add和remove),LinedList的效率高于ArrayList。

  此外,ArrayList和LinkedList都是线程不安全的。

10.3.3 List、Map与Set

  List接口和Set接口有共同的父类:Collection接口;而Map本身就是一个顶级接口。

  Collection接口用于存储一组不唯一、无序的对象,List接口存储一组不唯一、有序的对象,Set接口存储一组唯一、无序的对象;而Map接口存储的是一组键值对象(entry对象),并提高从key到value的映射。