回答

收藏

java必刷100面试题 PDF 电子书

Java电子书 Java电子书 55 人阅读 | 0 人回复 | 2022-01-09

Java电子书:java必刷100面试题  格式 md 电子书 PDF 电子书 Java吧 java8.com( u+ K% ?& f0 E% L$ F- e  [/ C
" J* f* L; `- v4 l& x4 f
编号:189-P0035【Java吧 java8.com】$ @$ L: G" C4 n. q9 Z8 ?. t5 z
! h6 s2 r% U: _! j- r) d
123.png
9 B1 |7 Y) w& X( R0 v, M

: G& K( z8 H4 `- [$ CJava电子书目录:
# HashMap原理是什么,在jdk1.7和1.8中有什么区别

. k# b2 I# i; c' m* E
HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。我们用下面这张图来介绍
4 V/ |8 w2 q! [% B8 w& q3 Y
HashMap 的结构。
. Q/ l, ?5 Y. h2 T6 h
**JAVA7** 实现
) B* A. O3 g1 b" @# H' _( h
<img src="images/Java7_HashMap.jpg" style="zoom:67%;" />

  s9 i2 ?" S" |8 w# ~1 ], \
大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色

8 F1 ^% X+ A( H
的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。
$ c" y- L- A1 b7 j( x9 N" j' }' I( ]" z
1. capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。

+ A. Q+ B( }3 P' p
2. loadFactor:负载因子,默认为 0.75。
. w8 m6 K  _( G1 x8 r+ |! c
3. threshold:扩容的阈值,等于 capacity * loadFactor
- \: \' J: ]! x
**JAVA8实现 **

# M7 F. |0 V: }& z: Y
Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。
& X5 u0 R" u; k
根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决
  X- l8 f  D4 c. p) L% N+ M& r
于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。
, T" v& Z! i! k% T/ Y& H7 E" u' f3 Q
百度云盘下载地址:% _* E% Z9 `( _% E$ N$ s
游客,本内容需要消耗 4积分 才能浏览(无需花钱,回答问题即可获取积分)兑换

8 a7 I( g, t7 u- K( R* h提取码: f83j
  l# K- u9 ^; X9 k& l
5 q& `; N. Y' D; X0 Z5 ^4 y  P) V4 o2 P
7 o* s/ i) Q( \" H; d. n: N; U
4 `# Q2 a7 ]) b- L4 n
% W7 T4 F' Q0 P% |
' H' z  ]% y! n2 o1 @7 N  f! j# [
关注下面的标签,发现更多相似文章
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则