阿里内推面经1:HashMap和Hashtable区别总结

需积分: 0 0 下载量 22 浏览量 更新于2023-12-13 收藏 320KB DOCX 举报
2019年阿里内推面经中包含了关于哈希表的一些问题和注意事项。在面试中,一些内容可能包括了一些数据结构和Java集合框架中的知识。其中包括了Hashtable和HashMap的比较,以及它们在多线程环境下的使用情况。Hashtable是一个线程安全的Map实现,基于synchronized实现,而HashMap是线程不安全的实现。因此,当多条线程访问同一个Map对象时,使用Hashtable实现类会更好,考虑到线程安全的需求。此外,Hashtable不允许使用null作为key和value,如果试图把null放进Hashtable中,将会引发NullPointerException异常;但HashMap可以使用null作为key和value。此外,Hashtable和HashMap在默认大小和扩容方式上也有所不同,Hashtable默认大小为11,按照2倍1的方式扩容;而HashMap默认大小为16,按照2倍方式扩容。最后,Hashtable通过一次hash计算出key的hash值,然后与表长取模,得到对象的散列位置,而HashMap通过两次hash计算得到散列位置。 综上所述,Hashtable是线程安全的,不允许使用null作为key和value,而HashMap是线程非安全的,可以使用null作为key和value。Hashtable的默认大小为11,按照2倍1的方式扩容,而HashMap的默认大小为16,按照2倍方式扩容。同时,Hashtable和HashMap使用的散列计算方式也有差异。 在Java的集合框架中,对于选择使用哪种类型的Map实现类,需要根据具体场景和需求进行权衡和选择。当涉及到多线程的情况时,可以考虑使用Hashtable以确保线程安全;而在性能方面,HashMap更具优势。此外,在存储数据时,需要注意Hashtable不允许使用null作为key和value,而HashMap可以。同样,对于Hashtable和HashMap的默认大小和扩容方式也需要进行考虑,以便进行合理的使用和优化。总之,在面试和实际开发中,对于HashMap和Hashtable的区别和使用方法的理解与把握,都是具有重要意义的。