From 5a80c71bd532ff0f96af2a39dfbe3be2596aaa32 Mon Sep 17 00:00:00 2001 From: haoxiqiang Date: Fri, 13 Mar 2015 22:36:18 +0800 Subject: [PATCH] 1.format the iterator files --- .../images/Iterator_UML_class_diagram.svg.png | Bin 0 -> 10765 bytes iterator/haoxiqiang/iterator_2.jpg | Bin 17099 -> 0 bytes iterator/haoxiqiang/readme.md | 81 +++++++++++------- .../{ => resource}/AndroidMileage.java | 0 4 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 iterator/haoxiqiang/images/Iterator_UML_class_diagram.svg.png delete mode 100644 iterator/haoxiqiang/iterator_2.jpg rename iterator/haoxiqiang/{ => resource}/AndroidMileage.java (100%) diff --git a/iterator/haoxiqiang/images/Iterator_UML_class_diagram.svg.png b/iterator/haoxiqiang/images/Iterator_UML_class_diagram.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fe4ca9c03318fcd4641627b031eec9175b31e1 GIT binary patch literal 10765 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 F{s-&oTowQT literal 0 HcmV?d00001 diff --git a/iterator/haoxiqiang/iterator_2.jpg b/iterator/haoxiqiang/iterator_2.jpg deleted file mode 100644 index 256f06038ea79d209c1c2a1206486439ece83503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17099 zcmch;2UJu0wl5rdlPX=R1R*p9rS~8u2{k|vLa`w=^dcZdq)3MlK&46VMI>|tk&YB0 z)X;lJnjnZg_Bs2UeeV6vd-uCvaD|2Eg`^EWRiF6RMsPz{I%fPjDi@bKyj zxWoh00Hnkuq$I?oq$H$dWTfPjbd;176qJlKwAbiZ7+G0a7@3*bIr+KSZ}4$2GxLb> z@ZAys34z$SMem3T-r*Mn30}4WsK^PV2tE)H&;u^p0UQ7V00GI>5`TTj2#Bs0Atb;0 z^%)(2fQX2YkeG~|oQ{H=>gvCQM8p6RdQt{5-s_Ca;x|tmTLK-HzM#*IDr)Gv=}-@6x3 z)$zj)?}^S$p31x@|@7Krmb{(N1O(k{#~NX ztTW4$XI+T6(3ff3gD!jJHGd~e){4O%{qf2;Y|djPqa#1&Y{^$b?w0StN+{*P?D<$BQR-%e^Ocl)&ozNX0?W{=_#xo+qreXnFjYGv0^F8Mq@ zjppg;;rxkvk;Fe=tUk`LRW-5QS)-~x&;-_ zj3M3D`WnIFsddthp0?;&c7GU!prsK&khtjKArzhyYm9w-;uvsnk(Y{L5sT)L*#;^F zpWDg5;OCPM`kweTj`bjNSh=EK$nH-(^S$ zw8+v`LEaVkYwy?ySL{RC>1!w=_r+NO@8Iu$9b(ohCddz)O31LWH!7uNfb23wc{OQZ zJK~QDZp`9rti!1KYp^x5((#DgT!MO@!uW)`r_rO-KgPsR_?TV>CmKctO9EuQ=bCt40Wx$ zJI05cOK!{btRN4~m0D~Y0z-q*T3yQYonwjvz_$kr8YyfWu7ti{y=I_kaZT1YhG`71 zHXZw<;R9+4-Qyno3}3;#5&vZ)+UhZs!%;3f9^*uIBf<>8xm@U@Zqo=#Hh)w*YgfSS zo?|WafTRNjkA%~<$-{HvZbJ5rrxUxET9{Y};;IsfmYsiWCKdftQ&Foc5CJYegkK!| z!Oon&N4QRGQk;@&q^}AZFnT%>7lIHyUFpuV0Tfh~tTFRaPy(?!DFZTvs?LI6LkY_sRC^B4WDI}LF)Qo# zx`la5c;Cm*_(r+nC`}hUE-Xp3HnP_}ll-L6hFL6qlwrk6VBp#EPZ!hK*HKaXa(%(T zE-TM$Rth^xzWJ5=oEy_07Wi-IsMPTkG)5eRop>IN!QNW8TtK&%@7J*L8jQ zLH)TI32Jr^rW<+{6yl^N^A@HvMKwQsc`Q#|H6qrKlm()?3B_+*j}HOVs0owsoAzjF zOnJpVUMbD7XB(ynV8(T-iN6D*gD9p7dSP8{@CXVsI=B~Oyh%&>m4KL^Mvf@A{i}Qk zEplJU$0Z=`YjH?`ZF>KDl8QH%EVTuB&RZ=jE7%jwi?2rs0eQE7j^B7h=}}1fMo&GaqL4(SLP&{$5>EKT;$_%u9J{>&T6DK%SWB!e zc6a$Cq^8HYq;`Ry>?k_}Dzm{fOq2ZC_HmDGxKm^S;;WH|tr&gAC4h$j#C0FYPr-U6 zT|vZtXGJXuE%;*Nzx)D8CKsxf*K;kxDaW2d3JT;?M*5y+6h!SqZFgvrnLJYW`7^^Zi3=Dxrwui-U>K{I8_b4mE2B~x|7m@(y z4~YqBR7;UMt0be7J4kCRUm^5Pu7?e8Ejm6=I%819p)>$1DQ1h#Z>C4cIK>~h{;zTe|c=QfLq5KW9kbKrOyf2OZ?Wv=qqjTt>8b^*@GtX3@>CcLe5Rxc&=hQ+`SMy7Tj`f2Rb0F|;+P)ZZ^Ez4Ix!ax zr+O_AP|JcaPm|ReBc-|KwZO6R`@uepYcfxFdff;6X5uy~Ag!Of*OrdPn{)USx+{#C z0*amgrmO7!MOT>-l(WF^uCnEQufbi1a;sVY;5T@>ItL07(rKc{Xwpjn;QB`(9oog(7oNoA zAC*aOW^<}HmR^MT(??J@S35mk;NEW;HH4Q5_tpbX#(Ov-=l8DP6})`IrU%`)|*6yna&s{du9J==jyh!IXm9lS{y2$(+5| zC4kpcU}5JHkZy=&35;(@{Qlz-Fi`ZbtLgl0HOZ^hmVbBrDtOsoOQ$KTcnR1L!&Us9 z8THSExE4zb7WPv@;e7bzX%6QZiw{f8ZPQ;pV%0nH6dDJNWNAzlN^1W7&S?r8xirD{ z+5vNa?ES~PKaTX9{pv`h`Hk0}fH!q5#oqmKKpoFcnh;#Las__yM=`aIC-K#9dSCFD z0J-1{qA284A*AlbBf;v&Fp^@H~GO! zz*H>*^7`YCxA^*-*_Qb`(^0Cnu0m{-#BMyV;;;Btad+ZkVGCx$3TvngTB<~!!FKp4 zR&#A!xEOrmmFNz}1V@>>oDANB(bF4Zy}m*t^zHJaxM9jPu^_jg#18_=;B-eiY03_{ z#ZH(*oNUnt7B+apG(QD3fD@*rp$`$0smjfwATHCXOF*X~zUa*+_}D|}bJddQcPoTM z($o3G9HDIxFecQR3S5;$zW{JiC31zr!?G(rcxMvb>)E{oP@auog@*qwr;?2OR4JU# zAsZ)Fn>|HFX@m}J*V)VqZiXWz-hs_s8CTKdFV2A zSty;6TkZju!AeQn8u5((*Xw+Kc|*sE*Yh~QQwjb%^;$G{h5#wd zX)7QC2)`x~v5)#=`xz_iVS^>bfJ}Bl^r2&QI478~d4QMXp{N>2<9lA_KAa-Qto%mG z80vEoNo|I?Mgc!aL=4V=EelE86@nt&h47V(AQIJw*$r|}`V6!#0b?mY*)AIL?ElFo zY6g0MR%OR4W_(d@HHu60sJ-hRylpCs2}|oVW;aZjUUu(66$x?9@_ltvC^5*ow`8UV z!4`cHOpd z2v-b1nysC`Do-l6mkq9PM`Sv?{yIW)ls$5e{R=A5EpocO>ChgfBhGC0Hi7^1eCW~O zoe4@HeOpFHdmH+-4X&TSXiWTsDzRXNn@Nii z)v_W)ZiQBt?K;Czgj11QJa7M0?^M(fi74!u?m%c>#p4^G+csY8lFz@T>{T!gM9@5d%4IzD19q|QS-#k)nK+ol&o>YE->f`;8r+HXWV zk|f(fc@3dblb$+U=_ib}S}x0+v89FA3Vq>gHg2O1%zGZ9U#I6&o>o@#ym73|?!B{= zIvmE&OGyq_YRl5>6Rl}!0N4hv}qom<_;|4Z@EUe zsRKRwch4lIi_Z_U+C#5 zS7q`B)k>nj7+89)`SSCN@!Z2C9laL5kx=XART?i<7?r&9s9=qaD#9bSaDUQp6AjV! ztd0v?a*C&0H0Tz|jSp5aAWfb@K1;u);FW>-T06VW9w&6;Te^^F-Mr$B2xu^+sYhr+ zHAaw7>t?g|81wVS&;CEDXl1%IX>JT7@}%G#AT@{qoX!XXddQd;K)`EWLS(Szh5DA6 z=ny+PpddrICyvvi0P}LL2s;M7--@KJ(@zLVkDRWymT&k~(k(nABy`TAbhCQ!duEwD zyzI}cRb*ZG{#KjvQebg@p1L=CtJ4A#J~zsjgEEyfIah9MWIn5HQQtk@Ca+ef?3{WFm|FLS!JR z;Ei_t(X$lZ5NaH-5lwgLm^V;IDhYRdasZZHiw*^mQ~mYts^`hy16l#loIb{+v#%@&*q zhhvUn9RVO4+ujcYb#KjRmPH%vmYMS`9%;l!^kcmeQECUkvf50a+jr1SEJy?D9g35$ zr}Bgj4i3YH+xGr_@cG7Dl6j8!=%i1%6cuty!-&-tQEM8RH=C>2LPvdK8=>}kTe3c> zH)AJw@lvVN1k}rw_*x@eGMAZ^zAivNoQ>Cx4T21}Z=yGGYA`$YR6BXRQbU^Sxvoe$ zD*EH5B2vTj9PbM@4w`_QQy<(&E~WS-hw1nnI%(xc%@C=X3(e$(s@AXw-_as*p zvb>0ddodIz{WxJS`!D&+Y?ap*B~Od!!6lUGr#5_=f?H^N4eK`#B*~$#*U5asgqFza zLtmu*vM4jr+^ce`IaXnKJT)7IQtLoc?TLV_x36KWU!UTGC3fBCm!fP!{Y_6$uMMk8 z84NfJl6MxLP{OFY>}74c9_AH5hX$o76JrzKG13v%j9c&p#HS|pGS<27rNCa)Re1Q= ziJQCTk|IX3ZuF?yRTtgo*L^BDe{TdbE^YI!@GKQ}YZP~Z_X#R5or=~P(w6x!C)!vI z6!g%|BF8s+bufSN(NC7TIx`3w*N{&l*iF$w zywUyI0E?l#@jy5LmR0i&4VccOBZYL$GQG-`RR4&W$hIg&-v|(1hhi{wNur^Qp&m{s zAb%^PMB0I5&qXEkKyhsQ>)5Cp>lxY^Al@Hz|lArgvik3fD3%D^2%g zAeN20qTU0BN98x8_$h?g+-0I{Y)D0rn6V_(<8^$((t_B%6D>BVH{fKVG2`FIKyzw@1aJ*(aN z+MU_OvO+KzF5#vNAQHHhv+})Lkp{`IYmh4`!C}-(t2ztReuhLxZR-AFPV-!ot^#z+ zK+z{Mbh`BQ%;ezC8tw(`Uuki3xPXCAkaHOWT_$hM}d67R8#`9xJel90W9|Z(=vP6 zLGVFhU7q|LLaP_!OMRD6&$8aK-0|pcIVU?kw~Ij(XQi){k>PyNBL~km4HpYRN;CZ= zE;Q!9PSU+F4vBJnwu=_ia*U{`!g-rdzW_=VFusi4RUemqnb?@=(i!_RkFB}4S!jWG zglol)IX(nPq6v;lm%tlzlRQE_MO^~ktIAi3zpr%}5P1$C$}gpV3NiPPLm?0g)pgxI zVsgD{<5$-}Pbz2+CJ)Jrd%E&=-|JtqTDJ-zNz ziV}nBSKaZ271OC+t*OD~wqbmjPgX{+cu1OCD8ZHn`V?T=;GjG~lF+U3FSfdq&fkC# ziMa+HiOA(UjKd5Ou`s(($#~`=*U{ac=}PQ#$PKVK@*A0M_J|91s;nwsy`HUVX>wki zDBrobg;NkksZVC-=d-~nkQ%~e=hUzx><}=+WjIbE)tJ-?U4x2fsM==Z&k_$Lyc6kC9?KjwvstU6ILS^eghzZ?_$m{@eOngwjq| z97gUvgH-y&a*$8F&xu=k_`epkTrUB@jH_~+!Gv zqRxiTh0Oh|t~Hn}T_5H(`C%qAox7)HM!M_-4qILUz8a{tLAu@xL|d8O{I`Wc$LF+< z>NhNz9yr!cEQ)q2>kUf|^M7^n?}(!SzQPo8-9I@jV)%PBeO1|0X4*M>YqqAksU!T5 zWzMzXM2EW^dqeTA7D|a>a667CfJW9va_=uf)GpfgC;+db@}@t^jB^p6?EIg`Y>y?y z-gW@798W&^K1pl-t;JoirCLRhLI~oXGg(KHi`ktfdrp+@)cEgemizMk0)Nyjhb>N< zOSi`b^_^bagE8E4x8+p%ti?t_0wbRYGJ2m-uO<-RQ#OY>O+_o=nyw<(gyw%ObN>3X zW?FglROgY`lKi_8_=cVfZ+=^e8Cio!@AN!6h2Z-g&6^d>vfhV9VSi@*uFQQ?$eE6B zg|Iwamx3sh_g&P(Ssqu?vpR3nm^N&eM_vhI;!y9q+`{vv9bqc!r<`R=l${7&FPaz- z^KU`vkRAIidk~jO-M|62tajqj%|>=artwT@oVG=Il?<`<_d|qN1~5cn$f(eXbUKNXQk>sy zd5MNT6nNSS%so)L=_hBBUUzWf<1qU72taM1>E&S4cyZRUEY7{;Sj*3lT4<(gnh^xL zJ)N5osv89SnkUEt%(6kDxYR z+J=iM*zEN8!w!bNQwpId44^8CKP|tWNeJOYNgQ6is4;)v*C6qR$`y6rsH35EHk2o( zWEy^_bb+6b=f&uR{s|%l@xTmM!^T|1@U+AFn5Sr>1LT4-GwCiAbjQC+_{zSr;&L!M z^W%$0>~I0(^;tt-EkqcDt;)xt;pRdVync*;)@9AxECGr<;|>2*5Ku%E;&Y<=@X3Qa z$k=)}zOtH-AjS!^FarIxG_L1I&l|T?2Cr?qBC(QA0c#|we%o5tG?U9iNAJDQ-9?$I z^yo>%quqSQeV|;s#-AYzp~*<^r{+&BZq>T_oZ$KnaHe*;iRonmhVdq*m}|+5N+DtmK6g`BEix?l%lCBA_>35>sr-{C zlyJnx(xVDE}hz)!idYF>152yG|0ZeC^iGbuS{I(71Dw=O0>b8RuV%*d`yb zctquoNedg(fV!{CGF4ukexN$JuVL9<7+dtCL9!ioySj8O&${(J?Eo|W)hbaR@?YL! z)-o-+S`NIs^P_XLe+=CR=kzq_ga|*$)koPVNdifpj3Ce8Nnn?|X0Vm{DFM?|Ljr>} z*k-JJnuofUS-jT%iXHh+oUqToa4sApzwO>5C%9yi`D9EwcdX*&p=;&eTd@#EN1*AvmYTl%cYiUWc z{_$^s8nu6-J|vxM6rdZh7JJ5{T-3~zR()5Zy#3mL696)9&~{*b>8DhsD6g=E2$-B%AAO*CtVDj*RUfp*M~)-LkbkH?4b8SsfEe& z6Ec|PZB8=1-4_D+9`Zl-sIy@BMlv>h^gPbleo>lkcdX9)Mj+*@p_QtLYci6IuFX^g z5E&5hQ~Ehm|Nkb4#nQ0!^i4dW%zXf7tG!lJ%S?sEznkIoPZ*5jsY8X>yZrOQ?eQ7; zU8c^y(FR1wGIVBy-=1SQo(%Y^yJX?{2RMDHe8i(Sx-Gm{8C9ChhZ+Y^1>Tpxy)}V?K#YM9s0ow0!ac(~G zT~{=bjm!Y8*!{7wtDuqaS_WUhud96OxXtrXmmRr}dUiiWdW`zk9&Gl3;YdA|30J=Z zRgPFvf}_O}kI|YEosB;KF(X@$J?p#Ww-OVmYMzE0Y?LlC64|6XsS>V@-a=nKIrNFX z$6uTdZlxq|TfN7G%Td4vgZDzDcDh1j6B2rB7_d&6;haAi_QsO=J_6f3$Dh?;q)yok z?=Hnfp(*wRNaI;C^h>qI z0rYVZ&-c}?+aL?-(G6yxw3gs>6rhyl6(DQO^wN~;bw-*RvU{XrP7!tA1j?rip6SG5 zK)7g3a0)quPvCJ)>BE(qWgX*ZZk8XS@*kTob=P-?J$rv|9ZpFz3UnHj1X0d1+?@v& z&Z7iM6-O!jqfhM0Tr#!Wbb?oxEr!XgUG=uxJuSvZ7A(1JIaLAkFg{?zZ)OD^h;;Du~=Zqe4~L3W{$c_;11Tz zpbl8?@HgN)g^Z@qdH1U3{p?kRc=FnV#4$!CZGn-^H_l^de}*7*QjNbf+Bd5eEPdp^ z?&xn-Cfc4W^(noo+K~tCLP`Vn`Dx$hJJtJUBzL-?4ci%^=(Qp*;pma2oBK4Eu?`Gj zlV`#{Ap_mlw0UWt7f&ot#tqL zkj7fC{_~n${GgM2tfx;uvLH2y@NVrE6gY^geJt@ziiMYkgI6bd<&kDx^ePr12HZd{ zJKzdU3U5+p>qp%(tjMA!1bdY-1P~YqQp!*YBBrCSXY!eCy#D^EKM-!p9)72yL}_^y zjX$Sh`Jny)K||2xDkIrKMftO_?zZi zuNN@&bsy*RRLS1*?7($t73f|({u8J6Ck*LrnNH+zs-6XJ+t!G6z34dkX9EPG=1@o; z-_Se!&=n9&>G$8|bj*Za)FkD3!h27W;z6M`n*Q;#VLrKD=8U(PELNH_0`tSAU9vud zO8~0}qI9elhHV=ySdo}+zSrM;tviWBL@5f*36i&f2f`o-Hw{@EZy{`%jB#N7R#b5r z^U1@>r&c1)ngQ36-yrFqba)n++dB19SwmX!8QX*;mapDpL+jINFzxXn8?q^akN{kv zR-%x65kZk4YR*U3C(q7QxM!vx3Vg`LXtgtz`;kaj8uZpoL+8C(qKoy)eM~(R9lVrE zmqcHO5`+-62SE+@u;0Gt_Y~igT-?98kS7M8N_YI&h0@tWp z)-sW{c7#`!z7P=4FaI@T+t*&T(kjPF&gP-iSr#y88Y}&wh>fGqM;5Mmo9c$H50iW6 z7L)chW2rd3xia1N;V$X)^kv@sNX7y(=(!`AIraQ9pBFrd%aWdwD3i}Tpn7<$S-EY- zu}%bJ$o)}U;#Rk*m)hEUE6KXj!e5iE`vk}V#uo_N?ZAo3mN)8d$%WoKvK=Tt-|hb1 zC8uUjn&Knr#kk=If|kn-2jr`z{$$@WL}xiSnV(KOQJXnwn|~|b^_KV8dV0E%z*&&0 z0zPA5WcSP~0*GQosagR~LEwaH(h7T-0E>6iZ|{2C@4N9~M?IN6PE=PE=d21+nX4m2 zPG`gy&ht^0`PP|~u;gH4a*=q6+fwp8kH9cL_^(@d*oQIq_$s(pJe5u72c&7567KHt zHHRrwiZ#UB$n064+lCaIzw2W4qR|E_B(IwI=p_%o1N=i8E$6J%`iw=<9ByBKn%Fz6^!dq1l4&Iryy2t zb@Qyt*?rEkCT6lr4n^$F#`O->rOaud zMaj`=pCz-O*`oe}C}FVzQ>W;J%XH{hR$34vdS{?09*O^P^6W0tW3@)ip{;-OEb}5W zyfWd{{F0>N7mf0_Oc8gEHBtiPBPda0+Z7;TvbtB}ve5_=_}C>t&|~f_^b#-#!eLu_ zIi-JR1s?Vm7>xZ^RLj2v;BNo+F*;F3F5BpDv>a1i0y0db+w08QU6zd5y!)s=bmU)Y zZiGpy*~m}{2pWwAXzcEdd^aFWO@g(3 zd_DG4_RDZfWCV3CgTx(-j27!Dr0i6e8d2z1k5gm`lWQCG_@p&ru6}Zhe{A`p-?jOR z-9?nADWC6XVmI)4xX9v1zw7OL@&RS)KZ+(Y1bpzv_P4RR?fdcrb0r4;#a;ptvtAcw zQ9Fho6m$=3H*r?>=@ErFdnSeB`R$IsK(oJR{kjq0z*3edTCTm}8N zvd@iiE-er*ZZ+h+_0;i(6v*BMi)NkZXa$LUQnYhdVAOiqN<*J>4K(@UliU*__?I~T zDtPGa%+QbXp&W-igg!PhOjRA?+J;Ppqh7H?b`Jfi`J2Dj+k6FdJ_c$I^J>l1^2rRi zCKzB#!WHgUPc7ifrV;Cp{>Yoo**qzEOc#%dPGWEY?3I4{-#(B0|CcyMa{r(SVlZrq zeJ#(qA#(o(4t(L-eC+ggfkfQv2xLYE6nxdA;!XQ%qlhNyv6{WPxBf_IEu|LhO%G(B z%m1{@5}hs=kXobFSXp<%RFzRR6>o?gy3<5+(fG0p^KfkUuTU~c-G+>#-|k-Cq<5of zS`8YntL1;~VJ3C1TyEZrD`*Xo_g8gi5cIv)it!)BV*J~swL)G~==e&Q^Ffi1-~4%r zHP*>4fg;c(a|O6@nEY4Lnb#u>NXzfAGWllS2m5q2(|TVC_W#4$r7ac{ACcNUf}ZUx zW{(8zSl4&i@d=mKZ295Rj{B6jqGvQB14OSUISH_GUyUOm-JK4 zf5=??r_O0eMbB9NZMM?~omuJ6<%%2@nK?a3=l?uT?~idK zyTJ=_y@Bog0lJMdw+qV}@_X3#pCpczRe5{pdDuI9je^KN>r-+uXsrrg!D{|u08Ac5 zYsHPY?0O6Lc23DG-#Ghnf3@;G5x+0xdy}=^t&mP>ffmkRB`N3c>z*8B?o(JL7R-=* z;l^A7UPFJSEB#kT%l_2O#Tu_^*LVpyrBF^R(@kDdzE*t^#$O~?q$^1Ws)5u(bvtW0 zUw3H)P_D=_gWT|CqCXt zMF5cION*`{xWCkqsR626OTMc!xqK%e@Yk==DE2iH>7skJL#yQKXhMP>_;pWJ;d*VLe5#No35-$N3mhQ z`-LkthBo)0WV~be^t3aoy$vsq@H3N*$BVg1IE(_LxKSOMtnWHPMDb@$u$Q=7BG|efEA4E<1!A zWGnIhyt#reH)NPxX8EF&8?5V_kXMjCzg`^Nee2|mm~62z^vmzs zk@wX;lUi+>bT)9NmZ^);LkY?#x)JTu4sn7ZXTt3GqW9Bcx31Igu0OYFOR&RyF>k!s z?`%_YdhyE`8JqXYxi0_uwng$mq>3SPk)Gt>al4ehQetm~WkrJH_PyP&i zQ?g-p@N2HbmnPJUG9S#!}Yh_$&rZUt2CM$Ty?J76;GtO3g%>Cyc zynpXbj|+;%V>u?J)9>CoeB5*@=mo1e$;sEi&3lx73dtKH6Nw}DCb^ZvR|>TH-L1rJ z=43#`A`huM8j$KMyZ7Bqe5yJNmuGh&YF;0^$e3kyKk?-|9P*eSz2uqb_|m7Qx2|($ zq~kH1`4DNuP}WW6@|lMtR+F%tYNfI-hGj-j@fm!^NuKv;&qs%WlU&y=JD6r(iGoa~ z!zT2n7Fo}`+FMBRn~k@glxfEHGA@-jRAQts(M9T-@c=@%7fGQ)=Z+CJEOy?4B2!Sh z^*2i!Fn+352$g^njp3`M?t`(uu1i4T1Fl`OuZ0OCZXrbsV_U9M4A<*d?rC`nvh_xi z^QyeyaPP2I$KdL|_Cy}S`4r-pbgL_K>q4)E0%PxUtnu+NdHZyED`%8`O>URjgCw78 zYgkjdj+;M#BDL6r3>1O@9GL=g&5ex-NB*0I1_O6wulzuFjt8fuV^(z|%5N-u7L+@j zVlFyEf3*ph=79|KCYlFd%GoG%tyh%En^$nZ$t*r@PJx<fG%PQ`(vIvv~9+_Izr&&uu2XUvGh2=Mn+C{z06 zH2JiG8VhW8RqdS1v3AmZ&rr<7Czx+|#bP;I{{E*!RNZ-&y7ryK%ED@WBRD28lznxF z{X~C5YR%q8k|-sWkAy3B8L?nCx?I101M9)Bffn6Im+lJ*{`sU-kov7pl6NJU8SyUC*{b0r* z4V(he0~bIh1^;c3e2=j|k56Q9Kv%j}yAt(Aqvt32T38PQ<6{jz(N$O-vP6l>uIpzP z@C98?Z=M5ry;Q+Wi#ea@2~;KOMxuBS*=I^V-=0B9VYb#b!=-69`c8;XCS+P@&MGwX zd-u_*ubszxjnVH*sT50@r_%=W7eNVO0k&c zrft?t@wR41ue;TpF^Af>=^vXg_~D>nd{SWR&_1o^5|IH?@4W&=v43TCa^PBBct=9r zB|u$iLe5a3LcHgQU-R4Y`|&fY-y>ulz4D*>l_uD&GQ<=H(ehV*_)PH?{#qyVqDu1{ z#o-mk+DPtPCow?`VsM}u54i-my|SE;KZC`kBo!O{E-u3Nk&;8pBUid_eiO-jPx{fk zdCjoVuTJK3rVsXk3hNya!z3|H-gt8nlVKR-xz1~7MwAU5LPf_FAwS_kHk4I{TLnEHPbaOo7)O zH}Sc5FW;R=oafa+3huSMDiU>PJ%K7P6jsgO3F{T(6iUQ8I+?ar!Oaaw$;IM-aSR2pBDr0iVOZi7<6}~au2^_#?_wUvYM9RJt+6W%r9OUpO%oP7 zHD+mIB5$}LXhWsKbJ!}GROE@drPN8vI%1Z5*Lxk|=dJbTdY5TjXczc^uB?YmUe7y# z7F`By8gz)-Gb^wX8<#3)!K$NDEk3Wiy_Yh*;GclrFy^)o4oME;;nfY7W{iyGGd&v% zA7Tzm5bw+8vk$Wh3s2v`qr;fOyol;PsCp?B z?7?}fA{JD|FlF!al$LC4>En15=&n!up{S(xg^eA0r15#bpW-F+r?zxdU6)Zl-Na31 zuPc*ri^&ognK}L^AhMg;I!K@TO?jHEDCX7WE%zzU)Vcb~UAWC_nD#PtY}q(tcJ-Yq zb5<}xTa7h^g*S&P&YLyG;<2doIhw!SzGw0lvaYVY4j)OOjqD9ets+l62l^Qf5|btzKz`*?C>o311Zj|wl!={|Z zU$e-kd0Rt*svFs8x?L(qBBmMUZM-#`oMlXP7y8KJ%f`NCo*oqMFfH>0wkBE*dJFyh z`0|BhwZ*Byqm~a&)h*u7mAG^U*!jhQx6~rE5c5XCgesJ(towNnI-tIRP&>OK*N9)r z)yTZADdtf8TO@SAr)FJuw16j*AzZXaSKX+TQ`Mh}TS*g_z(T`Wq`MDG0&TXl%&Kp=2 zt%F-~WJe}hPqBpLHEpaHkGN+{6u$ZO1@9liWlGHi5qo@zbltD7C#)Z<@gm~7Fib}-la?b@)FSh zM{`^8n_|XSbD1qh6o6$z+iqobqg=YXgG?69GsikPT^Yvu;xm?B(XWn-y=b#j-RIIq z9&(QM?LS%kXd1Aj{ri!p?)6_LwsX@DtiIlAXn=<&T}7mA8w%P(Q_PbEn%B;Lh7SLJ zeG+gNdD4LW#ZARJ6MHywWMc9^L00^&4|+TwTW}q*$WVU$svJ*ynoxP|2)|Ks8NB^+iF5qwAiy5;e?t%@o4Z78t!Mf^02+uM|AVHFs zILODO_&-Eqf<8ui9ex4%i25PlMCb&`$+T1Rh~`$A#-R4_4ZV<$=X~AVuVPL6{r>N? zf&c$(%^tPyy98Xvk|sBqej4?+nqk$uztO19T&j*8(tddeB427!iY@_pr6vfu=%8MSiVHC|cC6Z#s;Sd+y6;5%CBC()ThZ+zva zqz*ne4F(0ZzQijNXYC8-phT8XY>)$hTq?AB!-10~H}qYr%LG9B#4koSn|8WV8vFhO zvfzrSv~mYzN{9b^nxy?lj9>ZosuLFEFBj}qGlDf;StgR)NwI)Y6ZXXlKX%K-#Oo^F zYJ#}x-aCAX5tJV0vY1~>ITu_$Nb@%L?E>XlGfrz9X;g`G`xHDHpkOLf!4{Z*HG7_rX&a@! za)$xOXW89@@$eaUcR?z%q&h+xfWfriRih51^tJl^nDdX{Vxh8%Yb_(D9)I;9{^vWP zDB!g``M5-x63}eeP{`fyq}S`!dLpZnIl=mgd#Ucz&F|6fGjS}Dh51|t9wE6-wo(L^ zFPhGqB|Vn~I_p5{8u5sK^Z0E<$Sq7iilL5rs{%x^WjY;zg0Yb&_yc#^n8YLB+ z;lOhM=_VrnN#<|vBZPeQ*;I>rvBJrr>;9*NDhwS%S(kgrB_L9>pbz1j(`zuz4mdfz szw|CHM(`Pyrt?=O=l{lC#pUGx0IDPeCIA2c diff --git a/iterator/haoxiqiang/readme.md b/iterator/haoxiqiang/readme.md index 7e0b6ce..f6f544a 100644 --- a/iterator/haoxiqiang/readme.md +++ b/iterator/haoxiqiang/readme.md @@ -10,46 +10,25 @@ Android设计模式源码解析之迭代器(Iterator)模式 ### 模式的定义 迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 -### 使用场景 -  面向对象设计原则中的单一职责原则,对于不同的功能,我们要尽可能的把这个功能分解出单一的职责,不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。 +### 模式的使用场景   Java JDK 1.2 版开始支持迭代器。每一个迭代器提供next()以及hasNext()方法,同时也支持remove()(1.8的时候remove已经成为default throw new UnsupportedOperationException("remove"))。对Android来说,集合Collection实现了Iterable接口,就是说,无论是List的一大家子还是Map的一大家子,我们都可以使用Iterator来遍历里面的元素,[可以使用Iterator的集合](http://docs.oracle.com/javase/8/docs/api/java/util/package-tree.html) ## 2. UML类图     - ![iterator_2.png](iterator_2.jpg) + ![iterator](images/Iterator_UML_class_diagram.svg.png) ### 角色介绍   -* hasNext:用来判断集合中是否存在未被遍历到的元素 -* remove:移除元素 -* next:将游标(位置)移动到下一个位置 +* 迭代器接口Iterator:该接口必须定义实现迭代功能的最小定义方法集比如提供hasNext()和next()方法。 +* 迭代器实现类:迭代器接口Iterator的实现类。可以根据具体情况加以实现。 +* 容器接口:定义基本功能以及提供类似Iterator iterator()的方法。 +* 容器实现类:容器接口的实现类。必须实现Iterator iterator()方法。 ## 3. 模式的简单实现 +### 简单实现的介绍 +我们有一个数组,对其遍历的过程我们希望使用者像ArrayList一样的使用,我们就可以用过iterator来实现. -下面直接写出几种集合的遍历方式 - -### HashMap的遍历 -``` -HashMap colorMap=new HashMap<>(); -colorMap.put("Color1","Red"); -colorMap.put("Color2","Blue"); -Iterator iterator = colorMap.keySet().iterator(); -while( iterator. hasNext() ){ - String key = (String) iterator.next(); - String value = colorMap.get(key); -} -``` -### JSONObject的遍历 -``` -String paramString = "{menu:{\"1\":\"sql\", \"2\":\"android\", \"3\":\"mvc\"}}"; -JSONObject menuJSONObj = new JSONObject(paramString); -JSONObject menuObj = menuJSONObj.getJSONObject("menu"); -Iterator iter = menuObj.keys(); -while(iter.hasNext()){ - String key = (String)iter.next(); - String value = menuObj.getString(key); -} -``` +### 实现源码 下面我们自己实现一个Iterator的集合 ``` @@ -106,7 +85,32 @@ while (iterator.hasNext()){ Log.e("mileage",mileage.toString()); } ``` -### 原理分析 + +下面直接写出几种集合的遍历方式,大家可以对比一下 + +* HashMap的遍历 +``` +HashMap colorMap=new HashMap<>(); +colorMap.put("Color1","Red"); +colorMap.put("Color2","Blue"); +Iterator iterator = colorMap.keySet().iterator(); +while( iterator. hasNext() ){ + String key = (String) iterator.next(); + String value = colorMap.get(key); +} +``` +* JSONObject的遍历 +``` +String paramString = "{menu:{\"1\":\"sql\", \"2\":\"android\", \"3\":\"mvc\"}}"; +JSONObject menuJSONObj = new JSONObject(paramString); +JSONObject menuObj = menuJSONObj.getJSONObject("menu"); +Iterator iter = menuObj.keys(); +while(iter.hasNext()){ + String key = (String)iter.next(); + String value = menuObj.getString(key); +} +``` +## Android源码中的模式实现 一个集合想要实现Iterator很是很简单的,需要注意的是每次需要重新生成一个Iterator来进行遍历.且遍历过程是单方向的,HashMap是通过一个类似HashIterator来实现的,我们为了解释简单,这里只是研究ArrayList(此处以Android L源码为例,其他版本略有不同) ``` @@ -164,6 +168,19 @@ private class ArrayListIterator implements Iterator { * next,第一次调用的时候返回array[0]的元素,这个过程中removalIndex会被设置成当前array的index * remove的实现是直接操作的内存中的数据,是能够直接删掉元素的,不展开了 + + +## 4. 杂谈 +### 优点与缺点 +#### 优点 +* 面向对象设计原则中的单一职责原则,对于不同的功能,我们要尽可能的把这个功能分解出单一的职责,不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。 + +#### 缺点 +* 会产生多余的对象,消耗内存; +* 遍历过程是一个单向且不可逆的遍历 +* 如果你在遍历的过程中,集合发生改变,变多变少,内容变化都是算,就会抛出来ConcurrentModificationException异常. + + ### 题外话 -如果你想写一个集合的数据结构的话,通过实现Iterator来操作集合,这样能够降低学习成本,因为你让外部代码透明的访问集合内部的数据.当然在前面的例子中,你也见到了ConcurrentModificationException这个Exception,如果你在遍历的过程中,集合发生改变,变多变少,内容变化都是算,就会抛出来这个异常. + diff --git a/iterator/haoxiqiang/AndroidMileage.java b/iterator/haoxiqiang/resource/AndroidMileage.java similarity index 100% rename from iterator/haoxiqiang/AndroidMileage.java rename to iterator/haoxiqiang/resource/AndroidMileage.java