|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。
$ H- Z1 c1 Q* `- \! E1、HashMap的结构:
% K- {2 A! K5 K" M0 L6 u6 r. P数组与链表的结合体。5 S0 j1 Y1 v' q: i; Q$ n
: t* \* A( o# l8 z+ W. I
2、最直观的结构图:/ j& p- f* z5 E( v/ [) M F
+ n! |# D1 G3 q7 c( g0 r5 q! y
6 n! Y4 r& b$ j, @
: o: e2 m' ~1 a2 _5 I
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next* K! z8 `0 S' b1 e; f) N+ Z, s8 i
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
8 G+ O: _8 k( v. }- A; t/ @1 ?5 M
: z; O. c& S" r8 E+ I9 A
& @. U1 t, s; ?4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的8 p$ P3 e( D3 }1 i
# R$ \: W2 O# M- K6 Z2 p+ P5、默认的数组长度是16
% {$ J- H6 c( m6 I4 B( U1 W; [+ z$ k8 M" S3 g K1 j; U% [
5 S0 m m2 {6 H: c; O, M
9 }& Y D8 q, l
( O, l- ~( ^/ g! }3 E" v
) u" G* O* C1 f. ~" ]7 G" j, J9 {
2 ?% i( B) ?" _: y$ b2 m E5 n. O, S4 M; w) @) N1 M
% |; m/ ^. ~- o! y4 Z5 M$ v7 A# u |
|