|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。+ C- M+ _4 G; U5 }4 l
1、HashMap的结构:4 P m/ W* E J F( ], R$ a6 D+ q
数组与链表的结合体。* z( ^' y) E5 w6 ]8 V) ? m, C' r/ T
: e( a# P& T( N" T
2、最直观的结构图:
n2 _5 n# t- ^8 l
& U5 |; p/ n3 }7 g- o: f! p: p* |
8 q4 k: T! ~& M: o3 n
0 D2 S2 n3 c" D& l( _& d3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next- W3 w( _- k* G# z2 \
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
. _' h2 s! N o) W; N! t
8 D0 _. K0 P5 f7 `
* ?! r/ [! c/ H7 m$ r4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的
( {; ^" u% A/ Q
# Q9 l" r# s; c+ D: n/ \) N. [5、默认的数组长度是16
' V" x( ?3 ~- q3 _
! ]/ c8 M" T% V' X7 @8 G7 M1 ^+ `8 Q n& A
! w8 C$ z) ]9 p- s
1 _7 O9 x' i# c* [8 _9 g7 u5 t
9 r% k" {: q8 s' d# H
# k+ d2 l4 O) e4 P* I# y* m! d8 X
; {# l+ E; r1 ?; A
9 ?& K$ H3 m8 h* ? |
|