|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。. [" R. T* \- A* ?$ N3 ?% C6 D
1、HashMap的结构:
- } i9 C( \2 v; U o% @: Y" |数组与链表的结合体。
# P8 A* V9 a, f9 ?: W t; w4 X; s( v' @+ E v* i4 s
2、最直观的结构图:1 k0 A+ @* \$ Q( ]$ T1 r) C D
j6 L) X8 p8 U, j2 B
( Z( o5 l; p* {2 B$ I$ G4 C5 M& X2 p
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next; Q: F/ d) t( W( _& @
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- } , z/ ]; @* Z* A6 V% z
" t9 i ]( o* G& h2 f* G) h7 t) R$ i. ?
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的7 ?% o+ l K9 B5 x+ Y1 l
: w* m2 M' x* @0 { q5、默认的数组长度是16- ]/ A: W8 v/ u9 m4 P
; m2 i& L7 @' t/ {, N( T# F' |0 ^9 I X9 @5 V0 L9 m
; m' N& g8 |( [ B. ], V& z
& u4 X' T! {% g0 \1 t; g
6 _/ Z0 `( ^$ I, L9 V
: J9 t" T( e9 B( a
: ^8 r' S4 z5 O7 f$ F+ V9 w% _9 T+ n# u8 y3 n7 W' U5 g5 o
|
|