|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。( z' ?1 `. n$ a, }! V
1、HashMap的结构:
7 @0 A8 w2 ~. g0 w* q7 E( k数组与链表的结合体。* J4 D; m" B' E8 h" P2 {2 l
7 n# \+ N8 a5 l8 k; p
2、最直观的结构图:
; w# _! A1 j6 r. S& ^5 n
4 J$ `+ W" @+ `8 n
& @" T0 y8 C8 A6 a
i# r( E( s! w& m
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next
1 L" M) i/ v. `- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
& M* u f/ v+ F$ U& O' u+ M 8 Q: P. F$ D) a6 C* A# I9 i0 W
6 y+ r) P7 H) ^- ~& {/ `& c& R4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的8 v0 L# h9 ~0 l, W# `
, ~* T3 L& s( ^' p% v
5、默认的数组长度是16
) w, i; C6 [+ o( x( R' N7 J0 X+ O0 ~
! ?: [8 D( r1 X6 X) M! K0 w
" x2 d( }# S" M) `: `- t! P. F
2 ?3 _ @: i, u. [1 A7 X* q6 ~% o4 F* L: o' }, \
% Y: q- J( ?; Z7 ^5 ^
/ h* t6 G& L* c. ^' @0 Y- F9 c- i( O$ x! L, [4 X4 ~
|
|