Java基础知识面试题每日三道 追梦:第四天

导读:本篇文章讲解 Java基础知识面试题每日三道 追梦:第四天,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.说一下你理解的什么是HashMap?

特性:

储存的是键值对,线程不安全,非Synchronied,储存的比较快,能够接受null。
工作原理:
Map的put(key,value)来储存元素,通过get(key)来得到value值,通过hash算法来计算hascode值,用hashCode标识Entry在bucket中存储的位置,储存结构就算哈希表。

2.hashMap与Hashtable区别?

2.1、继承的父类不同

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

2.2、线程安全性不同

Hashtable 线程安全:因为它每个方法中都加入了Synchronize,对整个table加锁

HashMap是线程不安全的:HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。

2.3、是否提供contains方法

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

2.4、key和value是否允许null值

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null
Hashtable中,key和value都不允许出现null值。

2.5、两个遍历方式的内部实现上不同

HashMap使用 Iterator。

Hashtable使用Iterator,还使用了Enumeration的方式 。
2.6、hash值不同
HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

2.7、内部实现使用的数组初始化和扩容方式不同

HashTable初始默认容量为11,Hashtable不要求 底层数组的容量一定要为2的整数次幂, Hashtable扩容时,将容量变为原来的2倍加1,

而HashMap初始默认容量为为16,而HashMap则要求一定为2的整数次幂,而HashMap扩容时,将容量变为原来的2倍。

3.HashMap的(底层数据结构)?

在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用[链表]处理冲突,同一hash值的键值对会被放在同一个位桶里,当桶中元素较多时,通过key值查找的效率较低。

而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8),时,将链表转换为[红黑树],这样大大减少了查找时间。

Ps:今天的三道题已经结束了,欣赏一下吧。

请添加图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114987.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!