|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。6 g5 t* w+ j' A7 `3 S J
1、HashMap的结构:
: q8 J- ?0 y( v8 }: k/ W% `0 a数组与链表的结合体。0 o4 C! i9 E" q8 l
& x# Q; G2 @% j6 m U6 x7 o2、最直观的结构图:
. z0 G- U1 ?7 \$ r$ l* i) Y O; Y; I9 |4 ]5 o$ {2 a% ]
' r& U8 W' w! S( r0 M
5 P. n. T! E+ s: ]7 C% `0 ?2 j" S
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next
) a7 k8 b+ l) Y. s- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
7 ~9 f7 r0 \4 X: q/ w7 `& z ' D& i+ z3 T- X. z: i1 l
3 U; o- a8 E8 W( F& X8 C) c
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的 C) R0 K9 O# ? h/ W: K
' I6 X# F* D7 p5、默认的数组长度是16" e$ S3 X% ^" A0 x, W3 P: s0 F
' n0 h2 d$ G/ w! ]0 \- D: Q+ d- ] T
% u% a8 p9 P# z3 T
; P) N; j9 t. l: l0 o3 g1 d5 V8 {+ h7 c% @2 q
, }9 X3 R8 \; `/ a) w/ p' ]1 T) R5 X
2 X! t5 k, L, s7 z& v% l6 s) d: [7 E. E9 Q6 @
|
|