|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。
2 n: t+ U# \( r1、HashMap的结构:
6 V* x7 a4 _# V# n数组与链表的结合体。9 v, e% {( G/ J2 F. s$ A
" @& j# V* S6 X& Q7 {2、最直观的结构图:
6 C1 r# ^( m& N
8 @, c8 i' S- l' G" R
/ W. d% J6 s6 L. Y/ k8 u7 w, J& o$ D. n4 N7 X
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next+ T# o( @* B( U" j; C
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
8 R7 ~$ N3 w7 L) o, @
1 v7 K8 L* J( G* K$ H- U; K+ c$ J8 ~' u% u0 R* @
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的
0 m9 p4 D" A! @1 |4 B$ B
* s+ B) v9 w X5、默认的数组长度是16
: H, f4 S7 L! b' [
5 z6 A: H3 [4 _3 V3 Y f' i1 z+ M' j0 c) A. Y
2 [0 y+ M, U- Y- v- V# u
2 ?8 z. Q, z' f9 G4 p, t& H* y: B, v Y; j7 n- I6 t3 v
# X, D7 s6 j( A( A
. C1 w; ?: m3 ^
3 w( @9 e6 v1 b! p& F& L1 P0 F* F
|
|