|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。
! ~; a! M: S6 i1、HashMap的结构:
; U2 r; _ x( i4 t% U数组与链表的结合体。* ~* s% t+ O) [
% x% Z: y H7 D
2、最直观的结构图:
) ?0 D# g) ~- h! F' s( ]* R" \7 X+ r- ] D* V5 E
* U6 f2 y3 b. F) u) D+ c: H+ ]
5 d6 u0 e8 @+ C$ P3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next4 w9 \9 [6 M9 O3 W( g; \# \! K
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- } 5 e- W2 x. }1 _5 I
% L# f9 J$ B9 n! P( z6 q* z& e* M* p0 ~! T4 Z/ d
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的, N+ j: ~7 U$ b4 ]; Y: F3 ~
! o; K: r0 c0 g' o) W3 _5、默认的数组长度是16
0 P% I9 e0 c @* q [! z. n5 }, y5 a& W8 ]8 _4 M- `
3 [! N w4 d% ? D4 B# G
$ X! A0 b0 L' z0 j& O2 C5 ]5 U5 a
( \( I" a: K/ T% \5 Y4 i$ N& Q1 i. X& n j+ l
1 O7 K" T4 X+ U1 ?& k" l
6 ~, e+ I! j `, s( D0 U
0 }3 N; f! j8 `- z& Z- p
|
|