|
本次要分析的java数据结构是HashMap,为什么要分析HashMap呢?废话是这么回答的:HashMap重要呗,为什么这么说因为现在大多数的互联网开发中经常会涉及到HashMap。尤其在获取数据时,在转为json格式之前,基本都是以HashMap数据类型来呈现的,在网上也看了很多关于HashMap的资料,都是感觉讲解的不是很全面,这文章有的,另外一个文章中没有,都是一块一块的。没有那么全面的,这里把自己总结的关于HashMap的底层分析和大家分享下吧。也帮助大家深入理解下HashMap,更好的学习java。9 X0 _7 A4 b& d
1、HashMap的结构:
$ r1 c. ^& H2 P5 I8 f数组与链表的结合体。
3 g! ^2 ~9 M+ ^6 e% G" n
- f& D. o# w: d& s2、最直观的结构图:
3 Y; |" y) Q8 |8 c% U+ r7 H- `9 U3 A P4 x
( B# { B1 e J# ]/ P
8 K5 H! c- _& ~9 ?) p1 S3、HashMap的结构图,每个HashMap都包含这四个属性:key,value,hash,next
/ X( e4 K; ?% T- static class Entry<K,V> implements Map.Entry<K,V> {
- final K key;
- V value;
- final int hash;
- Entry<K,V> next;
- ..........
- }
+ ]3 L) {1 ?0 Z
4 W, z: w v! H. u0 H
/ q+ T: n# T( J3 z! ?" X; t% y4、loadFactor为加载因子(即在达到这个值得时候会扩容),hashmap设为0.75,这是值是基于时间与空间的折中考虑的
: X, w" c& u" |" Z4 y9 X1 p7 ?2 w( U* R/ S- P- |% S0 Q
5、默认的数组长度是16
1 B y4 j7 X3 O/ y- @- ~" _) [ ~( M1 V! O( U1 ~2 d
5 d; j6 F- k( J, R7 i
# R ?' y2 [) r& x
7 x" {; l2 o1 E9 M6 _% R' X. S- X
4 j9 Y: i" a& J# {4 `" X/ t8 ^" s* ^: \, ~& K$ U K& N; m
# w5 x4 H; e7 G y9 O
$ o0 M2 R7 r! h' g) d2 A |
|