|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。' e( b( X7 H3 L: z& R2 p2 u& O
1、HashMap的结构:: d8 x. m: d3 F8 t' J% I/ [
数组与链表的结合体。) n2 }# V( U+ j
" o' k$ ^, C" H. c# S
2、最直观的结构图:
/ z2 ?/ H: t8 o! |9 U" Y% N( C
7 o W8 Z7 S* y3 G2 o3 i
4 s( ?& w. O3 f* ]" w6 ~" P# J- a# R0 A6 s
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next
7 J* J, s" f. ^8 P2 Z/ Q- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
+ y M) }6 A7 ~. S: j
% a/ p: [! U J7 v3 v7 r5 c' Y: O$ D% D7 w2 B$ ^; I2 L
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的
; I. K; `* z. [8 N/ d' r0 P+ B: J) |
9 ?3 L- \ j2 U5、默认的数组长度是16- F3 n, ^9 E {
# i+ A& T# c- |6 n
% c- y/ c# ], o5 i, Z4 N0 n. o0 { \3 q3 R3 q2 N# h
4 P* D2 S& q5 I; Z f# S
9 z% J/ e! ?* w# Q6 J: f/ U" ^3 ]( V" p1 T! o3 L$ n% Y
; ~& _0 }( V, ]
# L/ N/ _( } ?4 d \0 y |
|