|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。
- T/ P1 [. W& I- O o# C1、HashMap的结构:
3 G3 ?7 Z# ]) h+ a) m+ j数组与链表的结合体。% b% ]8 F& }+ v; c( O
7 W% p+ x5 [% B" |9 h4 b2、最直观的结构图:) i, F U$ }7 N: ?
. N% v7 K1 r. H) K! z& G
( w2 r! W% g! ?/ M
2 M2 Q4 Z5 c% e0 a3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next
( u1 A, L6 p( M2 u. c# `' a& }- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- } ! {$ n( f! [/ u/ _7 s2 B
6 e/ W @; R! Z' Q
" b$ x( u+ O7 D1 B. s7 f4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的% u: T$ H; [, F
. z: C d$ \* D9 G( s4 N5、默认的数组长度是16
C* @" C @; |' i: d2 I' P& Q8 j7 G. R( D; r5 N
: H0 e- U: B( }9 {, H: S. h9 I; ` t8 v
" T- X' o1 O( m4 q v4 _; a# W$ g
3 V P% h8 l9 i2 e0 l2 A- W8 A
- V+ T2 k. x# a1 I4 y! ^
5 W4 Q8 }/ K& b/ K6 i; Z
; K/ ?4 F8 o2 ?4 `! `; k |
|