java对ArrayList排序代码示例
不废话了,直接给大家贴代码了。
classterm{ Stringstr; intid; publicterm(Stringstr,intid){ this.str=str; this.id=id; } publicStringtoString(){ returnstr+""+id; } } classstermimplementsComparable{ Stringstr; intid; publicsterm(Stringstr,intid){ this.str=str; this.id=id; } publicintcompareTo(Objecto){ return((sterm)o).id-id; } publicStringtoString(){ returnstr+""+id; } } //method1:explicitimplementsComparator classtermComparatorimplementsComparator{ publicintcompare(Objecto1,Objecto2){ return((term)o1).id-((term)o2).id; } } publicclasst1{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //ArrayList<Integer>arr=newArrayList<Integer>(Arrays.asList(3,1,3,7,8,0)); // //Collections.sort(arr,newComparator(){ // //publicintcompare(Objecto1,Objecto2){ //returnnewDouble((Integer)o1).compareTo(newDouble((Integer)o2)); //} //}); //method1 List<term>ls=newArrayList<term>(); ls.add(newterm("a",1)); ls.add(newterm("b",5)); ls.add(newterm("c",2)); ls.add(newterm("d",2)); ls.add(newterm("e",3)); ls.add(newterm("f",0)); Collections.sort(ls,newtermComparator()); System.out.println(ls);//[f0,a1,c2,d2,e3,b5] //method2:anonymousimplements Collections.sort(ls,newComparator(){ publicintcompare(Objecto1,Objecto2){ return((term)o2).id-((term)o1).id; } }); System.out.println(ls);//[b5,e3,c2,d2,a1,f0] //method3:instantiateaComparatortemplate Comparator<term>termCmp=newComparator<term>(){ publicintcompare(termt1,termt2){ returnt1.id-t2.id; } }; Collections.sort(ls,termCmp); System.out.println(ls);//[f0,a1,c2,d2,e3,b5] //method4:elementimplementsComparable List<sterm>lss=newArrayList<sterm>(); lss.add(newsterm("a",1)); lss.add(newsterm("b",5)); lss.add(newsterm("c",2)); lss.add(newsterm("d",2)); lss.add(newsterm("e",3)); lss.add(newsterm("f",0)); Collections.sort(lss); System.out.println(lss);//[b5,e3,c2,d2,a1,f0] } }
PrioriyQueue的用法和上述的排序类似,有三种方法:
classWordFreqimplementsComparable{ publicStringwd; publicintfreq; publicWordFreq(Stringwd,intfreq){ this.wd=wd; this.freq=freq; } publicintcompareTo(Objecto){ return((WordFreq)o).freq-freq; } publicStringtoString(){ returnwd+""+freq; } } publicclasstestt{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub PriorityQueue<WordFreq>pq=newPriorityQueue<WordFreq>(); pq.offer(newWordFreq("aaa",3)); pq.offer(newWordFreq("bbb",4)); pq.offer(newWordFreq("ccc",1)); while(pq.peek()!=null){ System.out.println(pq.poll()); }//从大到小输出 } }
注意,
for(WordFreqwf:pq){ System.out.println(wf); }
并不保证遍历的有序
如果List<String>ls进行排序的话,不需要写Comparator,因为String本身有compareTo的实现。