|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。/ E+ `7 h" c" U F8 ^1 H
1、HashMap的结构:* ~2 m0 q7 V$ W' S0 [) d, R
数组与链表的结合体。1 X& @2 f- ?" ]5 k1 G; C6 W. M( L
0 `# Y; V Z- T8 ~; V3 c2、最直观的结构图:
/ d$ K% C& z/ ~+ }' [# Y$ L+ j, a; V' F1 y. a6 [/ b
3 D$ F3 s9 n* [& H1 _
4 p3 ]& }$ Y: n, a6 [! _$ ~3 K3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next, A" C. V' x" x0 B- c+ \* |
- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
( O1 w) b( [0 P: f( ]; | 1 U7 g1 S3 `) a
5 N9 r. Y* |) p
4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的
: B( F& V/ d d
4 x. r' |# y2 w0 f8 m) ]5、默认的数组长度是16
( Q( a) ^) M" w' H9 h* |" x6 c9 Q1 o) A. i
# a* a0 \" j. J! F! F+ J0 f
1 ]+ ]+ S% g5 y( F6 t7 N
; \1 m2 S! _/ R, w+ [
2 h1 d( J8 ]# ] r, T6 [
$ t& [1 N# @# X0 i$ w1 S* d) y+ y
# K' w6 M2 r3 {- ~: X" K, g
|
|