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


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



HashMap
Hashtable
ArrayList
LinkedList
java
发布

街角有人祝福,巷口有人哭,这里却没人评论ε=(´ο`*)))