HashMap和Hashtable的区别:
1.继承的父类不同:
Hashtable继承自Dictionary;
HashMap继承自AbstractHashMap。
但二者都实现了Map接口。
2.线程安全性不同:
Hashtable是线程安全的;
而HashMap是线程不安全的,在多线程情况下要自己增加同步处理。我们通常在多线程情况下使用CurrentHashMap来代替HashMap。
3.是否提供contains方法:
Hashtable保留了contains方法,同时也包含containsValue和containsKey,其中contains方法和containsValue方法功能一致;
HashMap舍弃了容易让人误解的contains方法,只包含containsValue和containsKey方法。
该方法被用于查找某个value或key是否存在。
4.key和value是否可以为NULL:
在Hashtable中,key和value都不可以为null,尽管可以通过put(null, null)方法编译通过,因为key和value都属于Object,但是在get方法或contains时仍然会出现NullPointerException;
在HashMap中,key可以为null,但是这样的key只能有一个,value都可以为null,因此在get方法得到返回值时,当返回值为null时,我们无法判断该key不存在还是该key所对应的value不存在,所以我们不能通过get方法判断一个key是否存在,而应该用containsKey方法。
5.hash值的使用不同
Hashtable直接使用对象的HashCode;
而HashMap需要重新计算hash值。
6.内部实现使用的数组初始化和扩容方式不同
Hashtable在不指定容量的情况下默认容量为11,扩容时,会将容量变为原来的容量的2倍加1;
HashMap在不指定容量的情况下默认容量为16,扩容时,会将容量变为原来容量的2倍,并且,HashMap要求底层数组的容量必须为2的整数次幂。
ArrayList和LinkedList的区别:
1.ArrayList是一个由数组组成的结构,其特点是可以快速的依靠索引(index)来查找和读取数据。在进行元素的插入、添加、删除时,因为需要重排数组中的数据,所以效率比LinkedList低。
2.LinkedList是一个由双向链表组成的结构,它的每一个节点都保存着上一个元素和下一个元素的引用。因此它的查询效率比ArrayList低,但是在进行元素的插入、添加、删除时效率比ArrayList更好。