代码音符

面试必会之HashMap与Hashtable、ArrayList与LinkedList的区别

创建时间: 2020-5-26 0:05

修改时间: 2023-6-26 18:06

浏览: 185

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更好。

创建时间: 2020-5-26 0:05

修改时间: 2023-6-26 18:06

浏览: 185

*本文遵循 CC BY-NC-SA 许可协议。转载请注明出处!