![java Collection中的排序問題_第1頁](http://file4.renrendoc.com/view/2b72beba7c864cabc4ee42aafcd10199/2b72beba7c864cabc4ee42aafcd101991.gif)
![java Collection中的排序問題_第2頁](http://file4.renrendoc.com/view/2b72beba7c864cabc4ee42aafcd10199/2b72beba7c864cabc4ee42aafcd101992.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
javaCollection中的排序問題這里討論list、set、map的排序,包括按照map的value進行排序。1)list排序list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,歸根結底Collections就是調用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]);}}如果是自定義對象,需要實現Comparable接口使得對象自身就有“比較”的功能,當然我們也可以在外部使用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());當然這里可以直接Collections.sort(us),這里用Comparator對User自身的比較方法compareTo做了一點點優(yōu)化(對相同年齡的人根據用戶名排序,String的排序)。簡單提一下,Arrays的排序采用的是插入排序和歸并排序,當數組長度較小時直接插入排序。2)set排序set包括HashSet和TreeSet,HashSet是基于HashMap的,TreeSet是基于TreeMap的。TreeMap是用紅黑樹實現,天然就具有排序功能“天然就具有排序功能”是指它擁有升序、降序的迭代器。那么HashSet怎么排序呢?我們可以將HashSet轉成List,然后用List進行排序。例如: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轉換成數組用Arrays排序。3)map排序map包括HashMap和TreeMap,上面已經提過,TreeMap用紅黑樹實現,天然具有排序功能。那么HashMap怎么按“key”排序呢?方法很簡單,用HashMap來構造一個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”進行排序?//按照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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 警示標志管理方案
- 寧夏農村房子防水施工方案
- 冰雪經濟的綜合服務策略與實施路徑優(yōu)化
- 保障能源安全的創(chuàng)新驅動策略
- 西青環(huán)氧樹脂防腐施工方案
- 固廢處理項目目標與建設規(guī)模
- 旅游景區(qū)資源整合策略
- 安慶四中學2025屆中考三模生物試題含解析
- 2025屆黑龍江省哈爾濱市蕭紅中學中考生物全真模擬試題含解析
- 推動研學資源共享和區(qū)域合作的策略及實施路徑
- 對合同條款有異議函
- 模板工程風險辨識及防范措施
- 中醫(yī)館工作細則
- 2024版《安全生產法》考試題庫附答案(共130題)
- 節(jié)后復工安全教育培訓內容【5篇】
- 尋夢緣古法駐顏培訓課件
- 員工招聘與人才引進培訓課件
- 裝配式預制剪力墻外墻板制作教學課件:預制外墻板生產流程
- 英語旅游文本的句式特點及其翻譯
- 咖啡種植園項目計劃書
- 精裝修室內施工組織部署
評論
0/150
提交評論