-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1234 lines (633 loc) · 92.1 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html class="theme-next use-motion theme-next-mist">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta name="google-site-verification" content="VvyjvVXcJQa0QklHipu6pwm2PJGnnchIqX7s5JbbT_0" />
<link rel="stylesheet" type="text/css" href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5"/>
<link rel="stylesheet" type="text/css" href="/css/main.css?v=0.4.3"/>
<meta name="description" content="To err is human; to forgive, divine." />
<meta name="keywords" content="CAO,Going" />
<link rel="alternate" href="/atom.xml" title="Courage Me" type="application/atom+xml" />
<link rel="shorticon icon" type="image/x-icon" href="/favicon.ico?v=0.4.3" />
<script type="text/javascript" id="hexo.configuration">
var CONFIG = {
scheme: 'Mist',
analytics: {
google: ''
},
sidebar: 'post'
};
</script>
<script type="text/javascript">
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?b56ed77ba442f0ae3cb743e752e28a87";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<title> Courage Me </title>
</head>
<body>
<!--[if lte IE 8]>
<div style=' clear: both; height: 59px; padding:0 0 0 15px; position: relative;margin:0 auto;'>
<a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
<img src="http://7u2nvr.com1.z0.glb.clouddn.com/picouterie.jpg" border="0" height="42" width="820"
alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today or use other browser ,like chrome firefox safari."
style='margin-left:auto;margin-right:auto;display: block;'/>
</a>
</div>
<![endif]-->
<div class="container one-column
page-home
">
<div class="headband"></div>
<div id="header" class="header">
<div class="header-inner">
<h1 class="site-meta">
<span class="logo-line-before"><i></i></span>
<a href="/" class="brand">
<span class="logo">
<i class="icon-logo"></i>
</span>
<span class="site-title">Courage Me</span>
</a>
<span class="logo-line-after"><i></i></span>
</h1>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
<div class="site-nav">
<ul id="menu" class="menu menu-left">
<li class="menu-item menu-item-home">
<a href="/">
<i class="menu-item-icon icon-home"></i> <br />
首页
</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories">
<i class="menu-item-icon icon-categories"></i> <br />
分类
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives">
<i class="menu-item-icon icon-archives"></i> <br />
归档
</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags">
<i class="menu-item-icon icon-tags"></i> <br />
标签
</a>
</li>
<li class="menu-item menu-item-about">
<a href="/about">
<i class="menu-item-icon icon-about"></i> <br />
关于
</a>
</li>
<li class="menu-item menu-item-guestbook">
<a href="/guestbook">
<i class="menu-item-icon icon-guestbook"></i> <br />
留言
</a>
</li>
<li class="menu-item menu-item-commonweal">
<a href="/404.html">
<i class="menu-item-icon icon-commonweal"></i> <br />
公益404
</a>
</li>
</ul>
<div class="site-search">
<form class="site-search-form">
<input type="text" id="st-search-input" class="st-search-input st-default-search-input" />
</form>
<script type="text/javascript">
(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
(w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
})(window,document,'script','//s.swiftypecdn.com/install/v2/st.js','_st');
_st('install', 'PL96x7fVNTKfxFRsKqT8','2.0.0');
</script>
<div class="site-search-toggle"></div>
</div>
</div>
</div>
</div>
<div id="main" class="main">
<div class="main-inner">
<div id="content" class="content">
<div id="posts" class="posts-expand">
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/21/根据手机号码解析归属地/">
根据手机号码解析归属地
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-21
</span>
<span class="post-category">
| 分类于
<a href="/categories/Java-Tools/">Java Tools</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/21/根据手机号码解析归属地/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/21/根据手机号码解析归属地/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>项目中有时候需要根据手机号得到用户的归属地信息,在网上查了下有免费的API接口可以根据手机号得到用户的归属地信息,感谢这些免费的API。<br>下面就用一个根据用户手机号码查询归属地的API接口解析的例子,API是淘宝提供的还是比较牛掰的。<br>比较简单:<br><figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">http:</span>/<span class="regexp">/tcc.taobao.com/cc</span><span class="regexp">/json/mobile</span>_tel_segment.htm?tel=<span class="number">15850781443</span></span><br><span class="line">参数:</span><br><span class="line">tel:手机号码</span><br><span class="line">返回:<span class="constant">JSON</span></span><br><span class="line"><span class="constant">__GetZoneResult_ </span>= {</span><br><span class="line"> <span class="symbol">mts:</span><span class="string">'1585078'</span>,</span><br><span class="line"> <span class="symbol">province:</span><span class="string">'江苏'</span>,</span><br><span class="line"> <span class="symbol">catName:</span><span class="string">'中国移动'</span>,</span><br><span class="line"> <span class="symbol">telString:</span><span class="string">'15850781443'</span>,</span><br><span class="line"> <span class="symbol">areaVid:</span><span class="string">'30511'</span>,</span><br><span class="line"> <span class="symbol">ispVid:</span><span class="string">'3236139'</span>,</span><br><span class="line"> <span class="symbol">carrier:</span><span class="string">'江苏移动'</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p>根据给的API需要准备两样东西:<br>一、调用apache的HttpClient类实现httpGet方法,调用此API。<br>二、使用Jackson 解析返回来的json字符串成Map即可对应取其中的字段。</p>
<p>具体代码如下:<br><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> courage.me.utils;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.Map;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.apache.http.HttpEntity;</span><br><span class="line"><span class="keyword">import</span> org.apache.http.client.methods.CloseableHttpResponse;</span><br><span class="line"><span class="keyword">import</span> org.apache.http.client.methods.HttpGet;</span><br><span class="line"><span class="keyword">import</span> org.apache.http.impl.client.CloseableHttpClient;</span><br><span class="line"><span class="keyword">import</span> org.apache.http.impl.client.HttpClients;</span><br><span class="line"><span class="keyword">import</span> org.apache.http.util.EntityUtils;</span><br><span class="line"><span class="keyword">import</span> org.codehaus.jackson.JsonParser;</span><br><span class="line"><span class="keyword">import</span> org.codehaus.jackson.<span class="built_in">map</span>.ObjectMapper;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> class PhoneNumberUtils {</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">String</span> phoneLocationAPI = <span class="string">"http://tcc.taobao.com/cc/json/mobile_tel_segment.htm"</span>;</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">String</span> getProvinceByPhoneNumber(<span class="keyword">String</span> phoneNumber) {</span><br><span class="line"> <span class="keyword">String</span> param = <span class="string">"tel="</span>+phoneNumber;</span><br><span class="line"> <span class="keyword">String</span> resultJson = <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> resultJson = httpGet(phoneLocationAPI, param);</span><br><span class="line"> } <span class="keyword">catch</span> (Exception e1) {</span><br><span class="line"> e1.printStackTrace();</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//去掉=及其前面的字符串,格式化成规范的json字符串格式 :key:value</span></span><br><span class="line"> resultJson = resultJson.replaceAll(<span class="string">"^[__]\\w{14}+[_ = \']+"</span>, <span class="string">""</span>).<span class="built_in">trim</span>().replace(<span class="string">"\'"</span>, <span class="string">"\""</span>);</span><br><span class="line"> <span class="keyword">return</span> jsonToMap(resultJson).<span class="built_in">get</span>(<span class="string">"province"</span>);</span><br><span class="line"> } </span><br><span class="line"></span><br><span class="line"> <span class="comment">/**封装http get请求*/</span></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">String</span> httpGet(<span class="keyword">String</span> url, <span class="keyword">String</span> params) <span class="keyword">throws</span> Exception {</span><br><span class="line"> CloseableHttpClient httpclient = HttpClients.createDefault();</span><br><span class="line"> HttpGet httpget = <span class="keyword">new</span> HttpGet(url+<span class="string">"?"</span>+params);</span><br><span class="line"> CloseableHttpResponse response = httpclient.execute(httpget);</span><br><span class="line"> <span class="keyword">String</span> result = <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> HttpEntity entity = response.getEntity();</span><br><span class="line"> <span class="keyword">if</span> (entity != <span class="keyword">null</span>) {</span><br><span class="line"> result = EntityUtils.toString(entity);</span><br><span class="line"> }</span><br><span class="line"> } <span class="keyword">finally</span> {</span><br><span class="line"> response.close();</span><br><span class="line"> httpclient.close();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line"> } </span><br><span class="line"> </span><br><span class="line"> <span class="comment">/**jackson parse string to map*/</span></span><br><span class="line"> @SuppressWarnings(<span class="string">"unchecked"</span>)</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> Map<<span class="keyword">String</span>, <span class="keyword">String</span>> jsonToMap(<span class="keyword">String</span> jsonString) {</span><br><span class="line"> </span><br><span class="line"> Map<<span class="keyword">String</span>, <span class="keyword">String</span>> resultMap = <span class="keyword">null</span>;</span><br><span class="line"> ObjectMapper mapper = <span class="keyword">new</span> ObjectMapper(); </span><br><span class="line"> <span class="comment">//保证可以解析不规则的json格式</span></span><br><span class="line"> mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, <span class="keyword">true</span>); </span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> resultMap = mapper.readValue(jsonString, Map.class);</span><br><span class="line"> } <span class="keyword">catch</span> (Exception e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> } </span><br><span class="line"> <span class="keyword">return</span> resultMap;</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(<span class="keyword">String</span>[] args) {</span><br><span class="line"> <span class="keyword">String</span> province = getProvinceByPhoneNumber(<span class="string">"15850781443"</span>);</span><br><span class="line"> System.out.<span class="built_in">println</span>(province);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p>开源中国社区原始链接:<a href="http://www.oschina.net/code/snippet_251355_18921" target="_blank" rel="external">http://www.oschina.net/code/snippet_251355_18921</a></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/19/Java-Generate-Xml/">
Java Generate Xml
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-19
</span>
<span class="post-category">
| 分类于
<a href="/categories/Java-Tools/">Java Tools</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/19/Java-Generate-Xml/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/19/Java-Generate-Xml/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>在对http请求的接口进行解析处理时,经常会遇到传过来的是xml格式的数据,处理完成后需要返回一个xml格式的String回去。<br>下面就是一个简单的生成xml格式的数据返回功能。</p>
<figure class="highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="literal">import</span> org.dom4j.Document;</span><br><span class="line"><span class="literal">import</span> org.dom4j.DocumentHelper;</span><br><span class="line"><span class="literal">import</span> org.dom4j.<span class="built_in">Element</span>;</span><br><span class="line">public <span class="class"><span class="keyword">class</span> <span class="title">GenerateXmlTest</span> </span>{</span><br><span class="line"> private <span class="literal">static</span> <span class="built_in">String</span> string2Xml(<span class="built_in">String</span> field, <span class="built_in">String</span> value) {</span><br><span class="line"> Document <span class="built_in">document</span> = DocumentHelper.createDocument();</span><br><span class="line"> <span class="built_in">Element</span> root = <span class="built_in">document</span>.addElement(field);</span><br><span class="line"> root.addText(value);</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">document</span>.asXML();</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> public <span class="literal">static</span> <span class="keyword">void</span> main(<span class="built_in">String</span>[] args) {</span><br><span class="line"> <span class="built_in">String</span> s = string2Xml(<span class="string">"root"</span>, <span class="string">"0"</span>);</span><br><span class="line"> System.out.println(s);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>out<br><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="pi"><?xml version="1.0" encoding="UTF-8"?></span></span><br><span class="line"><span class="tag"><<span class="title">root</span>></span>0<span class="tag"></<span class="title">root</span>></span></span><br></pre></td></tr></table></figure></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/18/java-BigInteger-to-string/">
java BigInteger to string
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-18
</span>
<span class="post-category">
| 分类于
<a href="/categories/java/">java</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/18/java-BigInteger-to-string/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/18/java-BigInteger-to-string/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>从数据库取出一个字段的值,赋值给自己的创建的变量,出现如下异常告警:<br><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java<span class="class">.lang</span><span class="class">.ClassCastException</span>: java<span class="class">.math</span><span class="class">.BigInteger</span> cannot be cast to java<span class="class">.lang</span><span class="class">.String</span></span><br></pre></td></tr></table></figure></p>
<p>后来发现原来在mysql中建表的时候,设置字段的类型为bigint型<br>我在代码中要转成Integer类型的时候用到:<br>Integer.parseInt((String)map.get(vaule));这句报错</p>
<p>具体的解决方案:通过Object封装作为中间层进行转换</p>
<figure class="highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Object <span class="variable">ob =</span> <span class="built_in">map</span>.get(keyField);</span><br><span class="line">Integer.parseInt(ob.<span class="built_in">toString</span>());</span><br></pre></td></tr></table></figure>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/18/mysql保留关键字和表字段冲突/">
mysql保留关键字和表字段冲突
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-18
</span>
<span class="post-category">
| 分类于
<a href="/categories/Mysql/">Mysql</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/18/mysql保留关键字和表字段冲突/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/18/mysql保留关键字和表字段冲突/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>mysql数据库表的字段名称不能和数据库本身的保留关键字相同<br>问题:插入数据库的sql报异常,检查了好多遍没发现到底是啥原因,问题如下:<br><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">Thread-<span class="number">6</span> ERROR [com.sdk.biz.snowfox.common.db.SaveCacheToDB] doBatchDB <span class="number">1</span> exception: </span><br><span class="line">java.sql.SQLException: You have <span class="operator">an</span> error <span class="operator">in</span> your SQL syntax; </span><br><span class="line">check <span class="operator">the</span> manual that corresponds <span class="built_in">to</span> your MySQL server <span class="built_in">version</span> <span class="keyword">for</span> <span class="operator">the</span> <span class="constant">right</span> syntax <span class="built_in">to</span> use </span><br><span class="line">near <span class="string">'desc,create_time) values('</span>t<span class="string">','</span><span class="operator">a</span><span class="string">','</span>d<span class="string">','</span>o<span class="string">','</span><span class="operator">a</span><span class="string">','</span>test<span class="string">','</span><span class="number">2015</span>-<span class="number">08</span>-<span class="number">14</span> <span class="number">19</span>:<span class="number">25</span>:<span class="number">35</span><span class="string">')'</span> <span class="keyword">at</span> <span class="built_in">line</span> <span class="number">1</span> </span><br><span class="line">Query: insert ignore <span class="keyword">into</span> testTable(ptxId,userId,txId,priceId,statusCode,desc,create_time) values(?,?,?,?,?,?,?); </span><br><span class="line">Parameters: [[t, <span class="operator">a</span>, d, o, <span class="operator">a</span>, test, <span class="number">2015</span>-<span class="number">08</span>-<span class="number">14</span> <span class="number">19</span>:<span class="number">21</span>:<span class="number">04</span>], [t, <span class="operator">a</span>, d, o, <span class="operator">a</span>, test, <span class="number">2015</span>-<span class="number">08</span>-<span class="number">14</span> <span class="number">19</span>:<span class="number">25</span>:<span class="number">35</span>]]</span><br><span class="line"> <span class="keyword">at</span> org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:<span class="number">392</span>) ~[commons-dbutils-<span class="number">1.6</span>.jar:<span class="number">1.6</span>]</span><br><span class="line"> <span class="keyword">at</span> org.apache.commons.dbutils.QueryRunner.batch(QueryRunner.java:<span class="number">155</span>) ~[commons-dbutils-<span class="number">1.6</span>.jar:<span class="number">1.6</span>]</span><br><span class="line"> <span class="keyword">at</span> org.apache.commons.dbutils.QueryRunner.batch(QueryRunner.java:<span class="number">92</span>) ~[commons-dbutils-<span class="number">1.6</span>.jar:<span class="number">1.6</span>]</span><br><span class="line"> <span class="keyword">at</span> com.sdk.core.jdbc.DBUtils.batch(DBUtils.java:<span class="number">405</span>) ~[classes/:na]</span><br><span class="line"> <span class="keyword">at</span> com.sdk.core.jdbc.DBModel.batch(DBModel.java:<span class="number">64</span>) ~[classes/:na]</span><br></pre></td></tr></table></figure></p>
<p>仔细看上面的报错原因:You have an error in your SQL syntax,use near ‘desc,create_time)<br>sql语法错误,在desc这个字段附近。不注意还真不知道到底为啥会出现这种错误,后来在本地测试出现一样的问题。<br>找同事过来帮忙看原因也是一头雾水,后来终于发现,原因这个desc和mysql数据库中的排序关键字冲突了。</p>
<p>解决方案:1、修改字段名称desc,如desc_name,以后建表的时候要注意不要使用关键字了。<br>2、insert ignore into sdk_callback_pulzesdk(ptxId,userId,txId,priceId,statusCode,<code>desc</code>,create_time)<br> values(‘a’,’b’,’c’,’d’,’e’,’test’, ‘2015-08-14 19:21:04’)<br>注意desc和其他字段的区别,多了两个符号括起来。就是键盘上数字键的前面那个键盘上的符号(不晓得名字了)</p>
<p>总结:遇到问题,解决问题的过程是相当苦逼的,并且遇到这种坑爹的问题,更是要细心,成长的过程就是这么酸爽。下次建表的时候要长点心了!</p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/03/Top-10-Java中Strings的常见问题/">
Top 10 Java中Strings的常见问题
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-03
</span>
<span class="post-category">
| 分类于
<a href="/categories/Top-10-Series/">Top 10 Series</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/03/Top-10-Java中Strings的常见问题/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/03/Top-10-Java中Strings的常见问题/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>下面是关于Java String最常见的10个问题</p>
<h2 id="1-_如何比较String类型的变量?用“==”还是equals()?">1. 如何比较String类型的变量?用“==”还是equals()?</h2><p>简言之,“==”用于测试引用是否相等,equals()测试值是否相等。如果你想检查两个string是不是同一个对象,你需要使用equals()方法。<br>如果你知道String的intering(link)概念就更好了。</p>
<h2 id="2-_为什么说char[]比string好对于安全敏感的信息来说?">2. 为什么说char[]比string好对于安全敏感的信息来说?</h2><p>String是不可变长的,这就意味着一旦被创建,就不会改变直到垃圾回收掉。用一个数组你可以显式的更改它的元素值。用这种方式,安全敏感信息(像密码)将不会被显式在系统中。</p>
<h2 id="3-_在switch语句中可以使用string吗?">3. 在switch语句中可以使用string吗?</h2><p>从JDK1.7开始,我们可以使用string作为switch语句的条件。<br><figure class="highlight ceylon"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//java 7 </span></span><br><span class="line"><span class="keyword">switch</span>(str.toLowerCase()) {</span><br><span class="line"> <span class="keyword">case</span> <span class="string">"a"</span>:</span><br><span class="line"> <span class="keyword">value</span> = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">"b"</span>:</span><br><span class="line"> <span class="keyword">value</span> = <span class="number">2</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<h2 id="4-_如何将string转换成int?">4. 如何将string转换成int?</h2><figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> n = Integer.parseInt(<span class="string">"10"</span>);</span><br></pre></td></tr></table></figure>
<h2 id="5-_如何用空格分割一个字符串?">5. 如何用空格分割一个字符串?</h2><figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">String[] </span><span class="keyword">strArray </span>= aString.split(<span class="string">"\\s+"</span>)<span class="comment">;</span></span><br></pre></td></tr></table></figure>
<h2 id="6-_substring()方法到底是干什么用的?">6. substring()方法到底是干什么用的?</h2><p>在JDK1.6中,substring()方法引用一个已经存在的string的字符数组,而不是重新创建一个。创建一个新的string代表一个新的字符数组。你可以+一个空字符串来创建一个新的string<br><figure class="highlight openscad"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">str</span>.substring<span class="params">(m, n)</span> + <span class="string">""</span>;</span><br></pre></td></tr></table></figure></p>
<p>这句代码将会创建一个新的字符数组来表示一个新的string,有时候这种方式会使你的代码更快,因为垃圾回收器可以收集不用的大的string并且只保留其sub string.</p>
<h2 id="7-_String_vs_StringBuffer_vs_StringBuilder">7. String vs StringBuffer vs StringBuilder</h2><p>String vs StringBuilder:StringBuilder是可变长的,这就意味着你可以在创建一个字符串后修改它。StringBuilder vs StringBuilder: StringBuffer是同步的,也就是说是线程安全的,但是比StringBuilder速度慢。</p>
<h2 id="8-_如何重复一个string?">8. 如何重复一个string?</h2><p>在Python中我们可以用一个数字就可以重复一个string。Java中,我们可以使用Apache的StringUtils.repeat()方法。<br><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">String</span> <span class="built_in">str</span> = <span class="string">"adcs"</span>;</span><br><span class="line"><span class="keyword">String</span> repeated = StringUtils.repeat(<span class="built_in">str</span>,<span class="number">3</span>);</span><br></pre></td></tr></table></figure></p>
<h2 id="9-_如何将字符串转换成日期类型?">9. 如何将字符串转换成日期类型?</h2><figure class="highlight lasso"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">String</span> str <span class="subst">=</span> <span class="string">"Sep 17, 2013"</span>;</span><br><span class="line"><span class="built_in">Date</span> <span class="built_in">date</span> <span class="subst">=</span> <span class="literal">new</span> SimpleDateFormat(<span class="string">"MMMM d, yy"</span>, <span class="built_in">locale</span><span class="built_in">.</span>ENGLISH)<span class="built_in">.</span>parse(str);</span><br></pre></td></tr></table></figure>
<h2 id="10-_如何计数一个char在一个string中出现的次数?">10. 如何计数一个char在一个string中出现的次数?</h2><p>使用Apache的StringUtils类的方法<br><figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> n = StringUtils.countMatches(<span class="string">"111222"</span>, <span class="string">"1"</span>);</span><br></pre></td></tr></table></figure></p>
<p><a href="www.programcreek.com/2013/09/top-10-faqs-of-java-strings/">原文链接</a></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/08/03/LittleSummry/">
LittleSummry
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-08-03
</span>
<span class="post-category">
| 分类于
<a href="/categories/summry-life/">summry life</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/08/03/LittleSummry/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/08/03/LittleSummry/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>2015年转眼间已经过了一大半了,生活继而有了很大的变化,而不是改善,当初为了自己所谓的梦想和追求,走了出来,虽说不后悔,却也有些伤感。一方面在收支上直接跟财政挂钩,搞了个财政赤字出来。另一方面在学习上,虽然学习了很多东西,实际上并没有想象中学到的多而且深入。理想和现实之间总有无法逾越的鸿沟,即使计划的总体安排是这样,但是并没有起到太多决定性的作用。</p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/07/20/Top-10-Java常见的Exceptions/">
Top 10 Java常见的Exceptions
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-07-20
</span>
<span class="post-category">
| 分类于
<a href="/categories/Top-10-Series/">Top 10 Series</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/07/20/Top-10-Java常见的Exceptions/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/07/20/Top-10-Java常见的Exceptions/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>这篇文章总结了关于Java Exceptions 10个最常被问的问题</p>
<h2 id="1-_Checked_vs_UnChecked">1. Checked vs UnChecked</h2><p>简言之,检查异常必须在一个方法中被显式捕获,或者在方法的throws从句中被声明。非检查时异常是由于除数为0、空指针异常等问题导致的。非检查时异常特别重要,因为你希望其他使用你的API的开发者知道如何处理这些异常。<br>例如,IOException是一种常见的检查时异常,运行时异常是一种非检查时异常。在读余下的文章之前你可以看下<a href="http://www.programcreek.com/2009/02/diagram-for-hierarchy-of-exception-classes/" target="_blank" rel="external">Java Exception Hierarchy Diagram</a></p>
<h2 id="2-_管理异常的最佳实践">2. 管理异常的最佳实践</h2><p>如果一个Exception可以被合理的处理,那么它就应该被caught,否则就应该被thrown抛出。</p>
<h2 id="3-_为什么在try中声明的变量不能在catch和finally语句块的中被调用?">3. 为什么在try中声明的变量不能在catch和finally语句块的中被调用?</h2><p>下面的代码中,字符串s在try块中被声明,不能被用在catch从句中。如下代码不能通过编译。</p>
<figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span> {</span><br><span class="line"> <span class="keyword">File</span> <span class="keyword">file</span> = <span class="keyword">new</span> <span class="keyword">File</span>(<span class="string">"path"</span>);</span><br><span class="line"> FileInputStream fis = <span class="keyword">new</span> FileInputStream(<span class="keyword">file</span>);</span><br><span class="line"> String s = <span class="string">"insideTry"</span>;</span><br><span class="line">}<span class="keyword">catch</span>(FileNotFoundException e){</span><br><span class="line"> e.printStactTrace();</span><br><span class="line"> System.out.<span class="keyword">print</span>(s);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>原因是你不知道在try语句块中Exception什么时候被抛出。对于一些特殊的例子来说,异常很有可能会在对象声明之前被抛出。</p>
<h2 id="4-_为什么Double-parseDouble(null)和Integer-parseInt(null)抛出不同的异常?">4. 为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?</h2><p>首先,它们确实抛出不同的异常。这是JDK的问题,主要是它们是不同的开发人员开发的,不用多想。<br><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Integer.parseInt(<span class="keyword">null</span>);</span><br><span class="line"><span class="comment">//throws java.lang.NumberFormatException: null</span></span><br><span class="line"><span class="keyword">Double</span>.parseDouble(<span class="keyword">null</span>);</span><br><span class="line"><span class="comment">//throws java.lang.NullPointerException</span></span><br></pre></td></tr></table></figure></p>
<h2 id="5-_Java中常见的运行时异常">5. Java中常见的运行时异常</h2><p>这里给出一部分,IllegalArgumentException,ArrayIndexOutBoundsException<br>它们可以用于如下语句条件不满足的时候。<br><figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span>(obj == <span class="literal">null</span>){</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"obj can not be null"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<h2 id="6-_我们可以在一个catch从句中捕捉多个Exception吗?">6. 我们可以在一个catch从句中捕捉多个Exception吗?</h2><p>答案是肯定的。只要这些异常类在类的继承中都继承同一个父类,你可以只用父类就可以了。</p>
<h2 id="7-_Java中构造函数可以抛出异常吗?">7. Java中构造函数可以抛出异常吗?</h2><p>答案是肯定的,构造函数是一种特殊的函数。</p>
<h2 id="8-_在finally从句中抛出异常。">8. 在finally从句中抛出异常。</h2><p>做下面的处理是合法的<br><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> mani(String[] args) {</span><br><span class="line"> <span class="keyword">File</span> file1 = <span class="keyword">new</span> <span class="keyword">File</span>(<span class="string">"path1"</span>);</span><br><span class="line"> <span class="keyword">File</span> file2 = <span class="keyword">new</span> <span class="keyword">File</span>(<span class="string">"path2"</span>);</span><br><span class="line"> <span class="keyword">try</span>{</span><br><span class="line"> FileInputStream fis = <span class="keyword">new</span> FileInputStream(file1);</span><br><span class="line"> }<span class="keyword">catch</span>(FileNotFoundException e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> }<span class="keyword">finally</span> {</span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> FileInputStream fis = <span class="keyword">new</span> FileInputStream(file2);</span><br><span class="line"> }<span class="keyword">catch</span>(FileNotFoundException e) {</span><br><span class="line"> e.printStackTrace(); </span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p>但是要有更好的代码可读性,你应该把嵌入式的try-catch块包起来作为一种新方法,然后将方法调用放在finally一个子句中。<br><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> mani(String[] args) {</span><br><span class="line"> <span class="keyword">File</span> file1 = <span class="keyword">new</span> <span class="keyword">File</span>(<span class="string">"path1"</span>);</span><br><span class="line"> <span class="keyword">File</span> file2 = <span class="keyword">new</span> <span class="keyword">File</span>(<span class="string">"path2"</span>);</span><br><span class="line"> <span class="keyword">try</span>{</span><br><span class="line"> FileInputStream fis = <span class="keyword">new</span> FileInputStream(file1);</span><br><span class="line"> }<span class="keyword">catch</span>(FileNotFoundException e) {</span><br><span class="line"> e.printStackTrace();</span><br><span class="line"> }<span class="keyword">finally</span> {</span><br><span class="line"> methodThrowException();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<h2 id="9-_在finally语句块中可以用return关键字吗?">9. 在finally语句块中可以用return关键字吗?</h2><p>可以。</p>
<h2 id="10-_为什么开发者默认处理异常?">10. 为什么开发者默认处理异常?</h2><pre><code>有这么多的时间段类似的代码段发生。如果正确处理异常是非常重要的,为什么开发人员一直这样做?
</code></pre><figure class="highlight julia"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span> {</span><br><span class="line"> ....</span><br><span class="line">}<span class="keyword">catch</span>(<span class="built_in">Exception</span> <span class="literal">e</span>) {</span><br><span class="line"> <span class="literal">e</span>.printStackTrace();</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>忽略虽然很容易。频繁发生并不意味着正确性。</p>
<p><a href="http://www.programcreek.com/2013/10/top-10-questions-about-java-exceptions/" target="_blank" rel="external">原文链接</a></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/07/16/Top-10-Java中常用于Array的方法/">
Top 10 Java中常用于Array的方法
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-07-16
</span>
<span class="post-category">
| 分类于
<a href="/categories/Top-10-Series/">Top 10 Series</a>
</span>
<span class="post-comments-count">
|
<a href="/2015/07/16/Top-10-Java中常用于Array的方法/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/07/16/Top-10-Java中常用于Array的方法/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>下面是经常在Java Array中用到的10个方法。在StackOverFlow上被提出最多的问题。</p>
<h2 id="1-_声明一个数组">1. 声明一个数组</h2><figure class="highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">String</span>[] aArray = <span class="keyword">new</span> <span class="built_in">String</span>[<span class="number">5</span>];</span><br><span class="line"><span class="built_in">String</span>[] bArray = {<span class="string">"a"</span>,<span class="string">"b"</span>,<span class="string">"c"</span>,<span class="string">"d"</span>,<span class="string">"e"</span>};</span><br><span class="line"><span class="built_in">String</span>[] cArray = <span class="keyword">new</span> <span class="built_in">String</span>[]{<span class="string">"a"</span>,<span class="string">"b"</span>,<span class="string">"c"</span>,<span class="string">"d"</span>,<span class="string">"e"</span>};</span><br></pre></td></tr></table></figure>
<h2 id="2-_打印一个数组">2. 打印一个数组</h2><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">int[] intArray = { 1, 2, 3, 4, 5 };</span><br><span class="line">String intArrayString = Arrays.<span class="keyword">toString</span>(intArray);</span><br><span class="line">System.<span class="keyword">out</span>.println(intArray);</span><br><span class="line"><span class="comment">// [I@7150bd4d</span></span><br><span class="line">System.<span class="keyword">out</span>.println(intArrayString);</span><br><span class="line"><span class="comment">// [1, 2, 3, 4, 5]</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//foreach</span></span><br><span class="line"><span class="keyword">for</span>(int <span class="keyword">n</span> : intArray) {</span><br><span class="line"> System.<span class="keyword">out</span>.<span class="keyword">print</span>(<span class="keyword">n</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h2 id="3-_用array创建一个list">3. 用array创建一个list</h2><p><strong>Arrays.asList(stringArray)</strong>传入一个数组,返回一个list<br><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">String</span>[] stringArray = { <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>, <span class="string">"e"</span> };</span><br><span class="line">ArrayList<<span class="keyword">String</span>> arrayList = <span class="keyword">new</span> ArrayList<<span class="keyword">String</span>>(Arrays.asList(stringArray));</span><br><span class="line">System.out.<span class="built_in">println</span>(arrayList);</span><br><span class="line"><span class="comment">// [a, b, c, d, e]</span></span><br></pre></td></tr></table></figure></p>
<h2 id="4-_连接两个数组(首尾连接)">4. 连接两个数组(首尾连接)</h2><p>用到apache一个jar包 commons-lang3-3.4.jar<br><figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[] intArray = { <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span> };</span><br><span class="line"><span class="keyword">int</span>[] intArray2 = { <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span> };</span><br><span class="line"><span class="keyword">int</span>[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);</span><br><span class="line"><span class="comment">// combinedIntArray {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }</span></span><br></pre></td></tr></table></figure></p>
<h2 id="5-_数组中插入分割字符">5. 数组中插入分割字符</h2><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// containing the provided list of elements</span></span><br><span class="line"><span class="comment">// Apache common lang</span></span><br><span class="line"><span class="keyword">String</span> j = StringUtils.<span class="built_in">join</span>(<span class="keyword">new</span> <span class="keyword">String</span>[] { <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span> }, <span class="string">"|"</span>);</span><br><span class="line">System.out.<span class="built_in">println</span>(j);</span><br><span class="line"><span class="comment">// a| b| c</span></span><br></pre></td></tr></table></figure>
<h2 id="6-_ArrayList_转换_Array">6. ArrayList 转换 Array</h2><p>思路:用到List.toArray(array)方法<br><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">String</span>[] stringArray = { <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>, <span class="string">"e"</span> };</span><br><span class="line">ArrayList<<span class="keyword">String</span>> arrayList = <span class="keyword">new</span> ArrayList<<span class="keyword">String</span>>(Arrays.asList(stringArray));</span><br><span class="line"><span class="comment">//创建一个和list的大小一致的空的数组</span></span><br><span class="line"><span class="keyword">String</span>[] stringArr = <span class="keyword">new</span> <span class="keyword">String</span>[arrayList.<span class="built_in">size</span>()];</span><br><span class="line"><span class="comment">//list 2 array</span></span><br><span class="line">arrayList.toArray(stringArr);</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">String</span> s : stringArr)</span><br><span class="line"> System.out.<span class="built_in">println</span>(s);</span><br></pre></td></tr></table></figure></p>
<h2 id="7-_Array转换Set">7. Array转换Set</h2><p>set的构造函数可传入一个集合<br> array to list ; new HsahSet(list)<br><figure class="highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//set是无序的</span></span><br><span class="line"><span class="built_in">Set</span><<span class="built_in">String</span>> <span class="literal">set</span> = <span class="keyword">new</span> HashSet<<span class="built_in">String</span>>(Arrays.asList(stringArray));</span><br><span class="line">System.out.println(<span class="literal">set</span>);</span><br><span class="line"><span class="comment">//[d, e, b, c, a]</span></span><br></pre></td></tr></table></figure></p>
<h2 id="8-_反转Array">8. 反转Array</h2><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[] intArray = { <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span> };</span><br><span class="line">ArrayUtils.<span class="keyword">reverse</span>(intArray);</span><br><span class="line">System.out.<span class="keyword">println</span>(Arrays.toString(intArray));</span><br><span class="line"><span class="comment">//[5, 4, 3, 2, 1]</span></span><br></pre></td></tr></table></figure>
<h2 id="9-_数组中删除一个元素">9. 数组中删除一个元素</h2><figure class="highlight cs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span>[] intArray = { <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span> };</span><br><span class="line"><span class="comment">//create a new array</span></span><br><span class="line"><span class="keyword">int</span>[] removed = ArrayUtils.removeElement(intArray, <span class="number">3</span>);</span><br><span class="line">System.<span class="keyword">out</span>.println(Arrays.toString(removed));</span><br></pre></td></tr></table></figure>
<h2 id="10-_检查数组中是否包含某个值">10. 检查数组中是否包含某个值</h2><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">String[] stringArray = { <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>, <span class="string">"e"</span> };</span><br><span class="line"><span class="keyword">boolean</span> b = Arrays.<span class="keyword">asList</span>(stringArray).contains(<span class="string">"a"</span>);</span><br><span class="line">System.out.<span class="keyword">println</span>(b);</span><br><span class="line"><span class="comment">//return true</span></span><br><span class="line"><span class="keyword">int</span>[] numbers = {<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>,<span class="number">8</span>,<span class="number">9</span>};</span><br><span class="line"><span class="keyword">boolean</span> a = Arrays.<span class="keyword">asList</span>(numbers).contains(<span class="number">1</span>);</span><br><span class="line">System.out.<span class="keyword">println</span>();</span><br><span class="line"><span class="comment">//return false;</span></span><br></pre></td></tr></table></figure>
<p>上述String[]返回true,然而int[]却返回false。原因是Arrays.asList(array)这个方法的返回值类型。<br>当array是int类型的时候,返回的是List<int[]>,而不是List<integer>。所以传入的值不会和int[]相等的。<br>此方法 不适用于int[]。</integer></int[]></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/07/12/Java中equals-和hashCode-的契约/">
Java中equals()和hashCode()的契约
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-07-12
</span>
<span class="post-comments-count">
|
<a href="/2015/07/12/Java中equals-和hashCode-的契约/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/07/12/Java中equals-和hashCode-的契约/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p><img src="/avatar/java-hashcode.png" alt="Alt text"><br>Java的父类 java.lang.Object 有两个很重要的方法被定义如下:<br><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">public boolean <span class="function"><span class="title">equals</span><span class="params">(Object obj)</span></span></span><br><span class="line">public int <span class="function"><span class="title">hashCode</span><span class="params">()</span></span></span><br></pre></td></tr></table></figure></p>
<p>它们已经被证明非常重要去理解,特别当用户自定义的对象被add到Maps中。然后,即使是高级开发者有时候也不知道如何合理的使用这两个方法。这篇文章中,我首先举一个经常犯的错误的例子,并解释hashCode和equals是如何起作用的。</p>
<h2 id="1-_一个常见的错误">1. 一个常见的错误</h2><p>常见的错误如下例子<br><figure class="highlight processing"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.<span class="keyword">HashMap</span>;</span><br><span class="line"> </span><br><span class="line"><span class="keyword">public</span> class Apple {</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">String</span> <span class="built_in">color</span>;</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">public</span> Apple(<span class="keyword">String</span> <span class="built_in">color</span>) {</span><br><span class="line"> <span class="keyword">this</span>.<span class="built_in">color</span> = <span class="built_in">color</span>;</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">public</span> <span class="built_in">boolean</span> equals(<span class="keyword">Object</span> obj) {</span><br><span class="line"> <span class="keyword">if</span> (!(obj <span class="keyword">instanceof</span> Apple))</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">false</span>; </span><br><span class="line"> <span class="keyword">if</span> (obj == <span class="keyword">this</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.<span class="built_in">color</span>.equals(((Apple) obj).<span class="built_in">color</span>);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(<span class="keyword">String</span>[] args) {</span><br><span class="line"> Apple a1 = <span class="keyword">new</span> Apple(<span class="string">"green"</span>);</span><br><span class="line"> Apple a2 = <span class="keyword">new</span> Apple(<span class="string">"red"</span>);</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//hashMap stores apple type and its quantity</span></span><br><span class="line"> <span class="keyword">HashMap</span><Apple, Integer> m = <span class="keyword">new</span> <span class="keyword">HashMap</span><Apple, Integer>();</span><br><span class="line"> m.put(a1, <span class="number">10</span>);</span><br><span class="line"> m.put(a2, <span class="number">20</span>);</span><br><span class="line"> System.out.<span class="built_in">println</span>(m.<span class="built_in">get</span>(<span class="keyword">new</span> Apple(<span class="string">"green"</span>)));</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p>在这个例子中,一个green苹果对象被成功的存在一个HashMap中,但是当在map中查询此对象的时候,这个对象没有被找到。程序结果是null。然而我们可以确定的是在debugger中该对象确实存在HashMap中。<br><img src="/avatar/hashCode-and-equals-contract.png" alt="Alt text"></p>
<h2 id="2-_问题是由hashCode()引起的">2. 问题是由hashCode()引起的</h2><p>这个问题是由于没有重写hashCode()方法。hashCode和equals中的契约是这样的:</p>
<ol>
<li>如果两个对象相等,它们必须有相同的hashcode值。</li>
<li>如果两个对象有相同的hashcode值,它们可能相等也可能不相等。</li>
</ol>
<p>Map背后的思想是能找比线性搜索更快的找到一个对象。使用散列键值来定位对象有两步过程。map内部存储对象作为一个数组的数组。第一个数组的索引就是键的hashCode的值。位于第二个数组通过线性搜索根据equals()来判断该对象是否被找到。</p>
<p>对象类的默认实现了hashcode()方法并返回不同的整数对于不同的对象来说。因此,在上面的例子中,不同的对象(即使同一类型)都有不同的hashCode值。</p>
<p>hashcode就像是一个序列的仓库存储,不同的东西可以存储在不同的仓库中。如果你把材料组织到不同的地方,而不是同一个仓库,那就更有效了。所以这是平均分配的hashCode值的一个很好的实践。(虽然不是主要的观点)。</p>
<p>解决方案就是在类中添加hashCode()方法,这里我只是使用color字符串的长度做示范。<br><figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="annotation">@Override</span></span><br><span class="line"><span class="keyword">public</span> <span class="function"><span class="keyword">int</span> <span class="title">hashCode</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.color.length();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p><a href="http://www.programcreek.com/2011/07/java-equals-and-hashcode-contract/" target="_blank" rel="external">原文链接</a></p>
</div>
<div class="post-footer">
<div class="post-eof"></div>
</div>
</div>
<div class="post post-type-normal ">
<div class="post-header">
<h1 class="post-title">
<a class="post-title-link" href="/2015/07/08/Top关于Java中Map的9种常见问题/">
Top关于Java中Map的9种常见问题
</a>
</h1>
<div class="post-meta">
<span class="post-time">
发表于 2015-07-08
</span>
<span class="post-comments-count">
|
<a href="/2015/07/08/Top关于Java中Map的9种常见问题/#comments" >
<span class="post-comments-count ds-thread-count" data-thread-key="2015/07/08/Top关于Java中Map的9种常见问题/"></span>
</a>
</span>
</div>
</div>
<div class="post-body">
<p>总的来说,Map是一种集合的数据结构有key-value对组成,每一个key可以在Map中出现一次。这篇文章总结了Java中Map最常用的9种使用方法。为了简单起见,我将在例子中使用泛型。因此我只使用Map而不使用具体的Map。但是你可以假设K和V都实现了Comparable接口。</p>
<h2 id="0-_Map2List_Map转化成List">0. Map2List Map转化成List</h2><p>Java中,Map接口提供三种集合:key集合、value结合、和key-value结合。它们都可以转化成一个List通过一个构造器或者addAll()方法。下面的代码片段展示了如何使用构造器创建通过Map创建一个ArrayList。</p>
<figure class="highlight lasso"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//keyList</span></span><br><span class="line"><span class="built_in">List</span> keyList <span class="subst">=</span> ArrayList(<span class="built_in">map</span><span class="built_in">.</span>keySet());</span><br><span class="line"><span class="comment">//valueList</span></span><br><span class="line"><span class="built_in">List</span> valueList <span class="subst">=</span> ArrayList(<span class="built_in">map</span><span class="built_in">.</span>valueSet());</span><br><span class="line"><span class="comment">//entryList key-value set</span></span><br><span class="line"><span class="built_in">List</span> entryList <span class="subst">=</span> ArrayList(<span class="built_in">map</span><span class="built_in">.</span>entrySet());</span><br></pre></td></tr></table></figure>
<h2 id="1-_在Map中遍历每一个Entry">1. 在Map中遍历每一个Entry</h2><p>通过一个键值对迭代遍历一个Map是最基本的操作。在Java,键值对存储在Map中被称为Map.Entry。Map.entrySet()返回一个键值对的集合,因此要通过一个Map的每一个entry是最有效的方式来遍历map</p>
<figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="label">for</span>(<span class="preprocessor">Entry</span> <span class="preprocessor">entry</span> : <span class="preprocessor">map</span>.entrySet()) {</span><br><span class="line"> K key = <span class="preprocessor">entry</span>.getKey()<span class="comment">;</span></span><br><span class="line"> V value = <span class="preprocessor">entry</span>.getValue()<span class="comment">;</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>在JDK1.5以前还可以一下方式遍历Map</p>
<figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">Iterator </span><span class="keyword">it </span>= <span class="preprocessor">map</span>.entrySet().<span class="keyword">iterator();</span><br><span class="line"></span><span class="label">while</span>(<span class="keyword">it.hasNext()) </span>{</span><br><span class="line"> <span class="preprocessor">Entry</span> <span class="preprocessor">entry</span> = <span class="keyword">it.next();</span><br><span class="line"></span> K key = <span class="preprocessor">entry</span>.getKey()<span class="comment">;</span></span><br><span class="line"> V value = <span class="preprocessor">entry</span>.getValue()<span class="comment">;</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h2 id="2-_根据key在Map中排序">2. 根据key在Map中排序</h2><p>根据key排序Map是一个经常用到的操作。一个方法是将Map.Entry放进List中,使用一个比较器Comparator来排序value。<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">List <span class="built_in">list</span> = <span class="keyword">new</span> ArrayList(<span class="built_in">map</span>.entrySet());</span><br><span class="line">Collections.sort(<span class="built_in">list</span>,<span class="keyword">new</span> Comparator() {</span><br><span class="line"> @<span class="function">Override</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">int</span> <span class="title">compare</span><span class="params">(Entry e1, Entry e2)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> e1.getKey().compareTo(e2.getKey());</span><br><span class="line"> }</span><br><span class="line">});</span><br></pre></td></tr></table></figure></p>
<p>另外一种方法是使用排好序的Map,可以根据key值进行自动排序。因此所有的key值必须要实现Comparable接口或者可以被一个Comparator接受。<br>一种实现了SortMap的类是TreeMap。它的构造器可以接受一个Comparator。下面的代码展示了如何将一个map转换成一个排好序的map的。</p>
<figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">SortedMap sortMap = <span class="keyword">new</span> TreeMap(<span class="keyword">new</span> Comparator() {</span><br><span class="line"> <span class="annotation">@Override</span></span><br><span class="line"> <span class="keyword">public</span> <span class="function"><span class="keyword">int</span> <span class="title">compare</span><span class="params">(K k1, K k2)</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">return</span> k1.<span class="title">compareTo</span><span class="params">(k2)</span></span>;</span><br><span class="line"> }</span><br><span class="line">});</span><br><span class="line">sortMap.putAll(map);</span><br></pre></td></tr></table></figure>
<h2 id="3-_根据value在Map中排序">3. 根据value在Map中排序</h2><p>将Map变成一个list然后排序也是可以的,不同的是我们比较Entry.getValue().下面的代码和上面几乎一样。<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">List <span class="built_in">list</span> = <span class="keyword">new</span> ArrayList(<span class="built_in">map</span>.entrySet());</span><br><span class="line">Collections.sort(<span class="built_in">list</span>,<span class="keyword">new</span> Comparator() {</span><br><span class="line"> @<span class="function">Override</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">int</span> <span class="title">compare</span><span class="params">(Entry e1, Entry e2)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> e1.getValue().compareTo(e2.getValue());</span><br><span class="line"> }</span><br><span class="line">});</span><br></pre></td></tr></table></figure></p>
<p>我们仍然可以使用一个排序的Map来解决这个问题,但只有当value是唯一的时候。在这样的条件下,你可以把key-value的值反倒。这个解决方案有很强的限制,因此不推荐使用。</p>