下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
javaCollection中的排序問題這里討論list、set、map的排序,包括按照map的value進行排序。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]);}}如果是自定義對象,需要實現(xiàn)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)化(對相同年齡的人根據(jù)用戶名排序,String的排序)。簡單提一下,Arrays的排序采用的是插入排序和歸并排序,當數(shù)組長度較小時直接插入排序。2)set排序set包括HashSet和TreeSet,HashSet是基于HashMap的,TreeSet是基于TreeMap的。TreeMap是用紅黑樹實現(xiàn),天然就具有排序功能“天然就具有排序功能”是指它擁有升序、降序的迭代器。那么HashSet怎么排序呢?我們可以將HashSet轉(zhuǎn)成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轉(zhuǎn)換成數(shù)組用Arrays排序。3)map排序map包括HashMap和TreeMap,上面已經(jīng)提過,TreeMap用紅黑樹實現(xiàn),天然具有排序功能。那么HashMap怎么按“key”排序呢?方法很簡單,用HashMap來構(gòu)造一個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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水利工程石方施工合同
- 物流行業(yè)就業(yè)協(xié)議
- 船舶制造科技合同管理辦法
- 餐飲業(yè)生管人才招聘協(xié)議
- 警用摩托車駕駛員聘用協(xié)議
- 紡織品運輸貨車租賃合同樣本
- 高速公路建設(shè)架子工合同
- 信息技術(shù)升級顧問聘用合同
- 建筑物無障礙設(shè)施工程合同模板
- 旅游景區(qū)管理員招聘協(xié)議
- 2024年咨詢工程師(經(jīng)濟政策)考試題庫附完整答案(奪冠系列)
- 期末檢測卷(一)2024-2025學(xué)年人教PEP版英語四年級上冊(含答案含聽力原文無聽力音頻)
- 高中名詞性從句語法填空單句練習(xí)題上(1-40)
- 2025醫(yī)院內(nèi)部審計工作計劃范文
- 《頸動脈介入治療》課件
- 2025屆廣東省廣州市物理高二第一學(xué)期期末檢測試題含解析
- 第14課 文化傳承的多種載體及其發(fā)展說課稿-2023-2024學(xué)年高中歷史統(tǒng)編版(2019)選擇性必修3文化交流與傳播
- 樁工機械使用前驗收表
- 分段計費說課稿
- 植物生物學(xué)試題和答案
- 2024年統(tǒng)編版七年級語文上冊期末測試卷(附答案)
評論
0/150
提交評論