下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
javaCollection中的排序問題這里討論list、set、map的排序,包括按照map的value進(jìn)行排序。1)list排序list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,歸根結(jié)底Collections就是調(diào)用Arrays的sort方法。publicstatic<T>voidsort(List<T>list,Comparator<?superT>c){Object[]a=list.toArray();Arrays.sort(a,(Comparator)c);ListIteratori=list.listIterator();for(intj=0;j<a.length;j++){i.next();i.set(a[j]);}}如果是自定義對象,需要實(shí)現(xiàn)Comparable接口使得對象自身就有“比較”的功能,當(dāng)然我們也可以在外部使用Comparator來規(guī)定其排序。例如:packagecom.fox;/**@authorhuangfox@data2012-7-5@emailhuangfox009@126.com@desc*/publicclassUserimplementsComparable<User>{privateStringname;privateintage;publicUser(){}publicUser(Stringname,intage){super();=name;this.age=age;@OverridepublicStringtoString(){return"name:"+name+",age:"+age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@OverridepublicintcompareTo(Usero){if(o.age<this.age)return1;elseif(o.age>this.age)return-1;elsereturn0;}*@paramargs*/publicstaticvoidmain(String[]args){Useru1=newUser("fox",11);Useru2=newUser("fox2",21);System.out.println(pareTo(u1));}}排序://List<User>us=newArrayList<User>();List<User>us=newLinkedList<User>();us.add(newUser("f5",12));us.add(newUser("f2",22));us.add(newUser("f3",2));us.add(newUser("f4",14));us.add(newUser("f5",32));us.add(newUser("f4",12));us.add(newUser("f7",17));us.add(newUser("f8",52));System.out.println(us.toString());longbt=System.nanoTime();Collections.sort(us,newComparator<User>(){@Overridepublicintcompare(Usero1,Usero2){if(o1.getAge()<o2.getAge())return-1;elseif(o1.getAge()>o2.getAge())return1;elsereturno1.getName().compareTo(o2.getName());}});longet=System.nanoTime();System.out.println(et-bt);System.out.println(us.toString());當(dāng)然這里可以直接Collections.sort(us),這里用Comparator對User自身的比較方法compareTo做了一點(diǎn)點(diǎn)優(yōu)化(對相同年齡的人根據(jù)用戶名排序,String的排序)。簡單提一下,Arrays的排序采用的是插入排序和歸并排序,當(dāng)數(shù)組長度較小時(shí)直接插入排序。2)set排序set包括HashSet和TreeSet,HashSet是基于HashMap的,TreeSet是基于TreeMap的。TreeMap是用紅黑樹實(shí)現(xiàn),天然就具有排序功能“天然就具有排序功能”是指它擁有升序、降序的迭代器。那么HashSet怎么排序呢?我們可以將HashSet轉(zhuǎn)成List,然后用List進(jìn)行排序。例如:Set<User>us=newHashSet<User>();//Set<User>us=newTreeSet<User>();//Set<User>us=newTreeSet<User>(newComparator<User>(){////@Override//publicintcompare(Usero1,Usero2){//if(o1.getAge()<o2.getAge())//return-1;//elseif(o1.getAge()>o2.getAge())//return1;//else//returno1.getName().compareTo(o2.getName());//}//});us.add(newUser("f5",12));us.add(newUser("f2",22));us.add(newUser("f3",2));us.add(newUser("f4",14));us.add(newUser("f5",32));us.add(newUser("f4",12));us.add(newUser("f7",17));us.add(newUser("f8",52));//set->arrayList<User>list=newArrayList<User>(us);System.out.println(list);Collections.sort(list);System.out.println(list);也可以將HashSet轉(zhuǎn)換成數(shù)組用Arrays排序。3)map排序map包括HashMap和TreeMap,上面已經(jīng)提過,TreeMap用紅黑樹實(shí)現(xiàn),天然具有排序功能。那么HashMap怎么按“key”排序呢?方法很簡單,用HashMap來構(gòu)造一個(gè)TreeMap。Map<String,Integer>us=newHashMap<String,Integer>();//Map<String,Integer>us=newTreeMap<String,Integer>();us.put("f1",12);us.put("f2",13);us.put("f5",22);us.put("f4",42);us.put("f3",15);us.put("f8",21);us.put("f6",123);us.put("f7",1);us.put("f9",19);System.out.println(us.toString());System.out.println(newTreeMap<String,Integer>(us));怎么按照“value”進(jìn)行排序?//按照value排序Set<Entry<String,Integer>>ks=us.entrySet();List<Entry<String,Integer>>list=newArrayList<Map.Entry<String,Integer>>(ks);Collections.sort(list,newComparator<Entry<String,Integer>>(){@Overridepublicint
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遙感應(yīng)用課程設(shè)計(jì)
- 非標(biāo)法蘭課程設(shè)計(jì)
- 龜兔賽跑課程設(shè)計(jì)
- 運(yùn)動(dòng)會(huì)系統(tǒng)課程設(shè)計(jì)
- 藝考形體走姿課程設(shè)計(jì)
- 椰汁雙效順流課程設(shè)計(jì)
- 運(yùn)動(dòng)課程設(shè)計(jì)與方法
- 雕塑課程設(shè)計(jì)范文
- 重慶大學(xué)防火課程設(shè)計(jì)
- 氣液壓課程設(shè)計(jì)jk63
- 米-伊林《十萬個(gè)為什么》閱讀練習(xí)+答案
- 碎屑巖油藏注水水質(zhì)指標(biāo)及分析方法
- 【S洲際酒店婚禮策劃方案設(shè)計(jì)6800字(論文)】
- 醫(yī)養(yǎng)康養(yǎng)園項(xiàng)目商業(yè)計(jì)劃書
- 《穿越迷宮》課件
- 《C語言從入門到精通》培訓(xùn)教程課件
- 2023年中國半導(dǎo)體行業(yè)薪酬及股權(quán)激勵(lì)白皮書
- 2024年Minitab全面培訓(xùn)教程
- 社區(qū)電動(dòng)車棚新(擴(kuò))建及修建充電車棚施工方案(純方案-)
- 項(xiàng)目推進(jìn)與成果交付情況總結(jié)與評估
- 鐵路項(xiàng)目征地拆遷工作體會(huì)課件
評論
0/150
提交評論