java Collection中的排序问题_第1页
java Collection中的排序问题_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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来规定其排序。例如: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做了一点点优化(对相同年龄的人根据用户名排序,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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论