|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。
0 |4 r" H+ e' d2 m3 X0 z$ Z8 `- R1、HashMap的结构:
! ?7 A5 P5 W& q; F% J% A6 r6 q数组与链表的结合体。
3 `- U0 @: x& W/ W. E- C; F+ v% ?! m
2、最直观的结构图: G- o& K0 t; }/ F+ z( ~
c& E' C& y. ^
+ B6 j P! r. u( T D6 V
7 I$ L$ N. { \
3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next6 q2 m0 ?7 c$ L1 U+ [9 D% {
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
7 F# k4 ~, h9 p
) y$ h0 q' k( V+ s6 p7 a3 R9 v1 ], Q
6 X6 [' N: ~# h/ Q, |7 Z4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的# f$ _ X7 S2 |/ T1 B
' E/ {: F2 Q+ n5、默认的数组长度是16
0 S {' Y+ E( A4 [
2 z! Z c7 m* h O" O
6 F# u9 B; H- w9 Q3 f2 d+ Y1 Y7 |# c1 a; k+ f7 K
% x* Z; g0 O4 z; B1 ^3 f
4 X% U; Y1 q& x7 |0 z E- T9 H, L) p3 r) j$ H
6 R0 r6 ~4 T! v2 H( r2 K- D- Q1 c, q9 H1 a
|
|