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的实现。