40道Java基础常见面试题及详细答案
发布时间:2020-12-31 19:06:19 所属栏目:交互 来源:网络整理
导读:最近看到网上流传着各种面试经验及面试题,往往都是一大堆技术题目贴上去,但是没有答案。 为此我业余时间整理了40道Java基础常见的面试题及详细答案,望各路大牛发现不对的地方不吝赐教,留言即可。 八种基本数据类型的大小,以及他们的封装类 引用数据类型
HashTable Synchronize同步的,线程安全,HashMap不允许空键值为空?,效率低。 HashMap 非Synchronize线程同步的,线程不安全,HashMap允许空键值为空?,效率高。?Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现,它们都是集合中将数据无序存放的。 Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized 关键字,而HashMap的源代码中则连 synchronized 的影子都没有,当然,注释除外。 2、Hashtable不允许 null 值(key 和 value 都不可以),HashMap允许 null 值(key和value都可以)。 3、两者的遍历方式大同小异,Hashtable仅仅比HashMap多一个elements方法。 |
从内部机制实现上的区别如下:
- 哈希值的使用不同,Hashtable直接使用对象的hashCode
而HashMap重新计算hash值,而且用与代替求模:
?
??
?
>>?
>>?
?
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_415506" class="syntaxhighlighter java">
<table border="0" cellspacing="0" cellpadding="0"><tr>
<td class="gutter">
<div class="line number1 index0 alt2">1
<div class="line number2 index1 alt1">2
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java keyword">static?<code class="java keyword">int?<code class="java plain">indexFor(<code class="java keyword">int?<code class="java plain">h,?<code class="java keyword">int?<code class="java plain">length) {
?
Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
JDK7中的HashMap
HashMap底层维护一个数组,数组中的每一项都是一个Entry。
[] table;
我们向 HashMap 中所放置的对象实际上是存储在该数组当中。 而Map中的key,value则以Entry的形式存放在数组中。
??
? {
?
next;
?
总结一下map.put后的过程:
当向 HashMap 中?put 一对键值时,它会根据 key的 hashCode 值计算出一个位置, 该位置就是此对象准备往数组中存放的位置。
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
相关内容