1、简介
这个和数组的排序又不一样了。
其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort,对于List和Vector而言,你可以使用Collections.sort方法。
JavaAPI针对集合类型的排序提供了2个方法:
java.util.Collections.sort(java.util.List) java.util.Collections.sort(java.util.List,java.util.Comparator)如果集合里面的元素都是相同类型的,并且实现了Comparable接口,那么可以直接调用第一个方法。
如果你有其它的排序的想法,比如你不想按照自然排序进行,还可以传一个Comparator过去,比如反向。
元素不相同的情况比较复杂,可以暂时不用考虑。
2、通过实现Comparable接口来实现list的排序
假如现在我们有一个Person类的list集合,要让其按照一个Order属性进行排序,我们可以让Person类实现Comparable接口,重写其CompareTo方法即可。具体实现如下:
1)、Person实体类
publicclassPersonimplementsComparable<Person>{ privateStringname; privateIntegerorder; /** *@returnthename */ publicStringgetName(){ returnname; } /** *@paramname *thenametoset */ publicvoidsetName(Stringname){ this.name=name; } /** *@returntheorder */ publicIntegergetOrder(){ returnorder; } /** *@paramorder *theordertoset */ publicvoidsetOrder(Integerorder){ this.order=order; } @Override publicintcompareTo(Personarg0){ returnthis.getOrder().compareTo(arg0.getOrder());//这里定义你排序的规则。 } }通过重写Comparable接口的compareTo方法,可以让程序按照我们想要的排列方式进行排序,如:这里我让Person按照order属性升序排序。
2)、测试类
publicstaticvoidmain(String[]args){ //初始化数据 List<Person>listA=newArrayList<Person>(); Personp1=newPerson(); Personp2=newPerson(); Personp3=newPerson(); p1.setName("name1"); p1.setOrder(1); p2.setName("name2"); p2.setOrder(2); p3.setName("name3"); p3.setOrder(3); listA.add(p2); listA.add(p1); listA.add(p3); //排序 Collections.sort(listA); //打印排序后的Person for(Personp:listA){ System.out.println(p.getName()); } }3)、结果:
name1 name2 name33、通过重载Collections.sort方法
直接重载java.util.Collections.sort(java.util.List,java.util.Comparator)方法。可以灵活的修改我们排序的方式,具体实现如下:
1)、Person实体类
和上面的类相同,但没实现Comparable接口
publicclassPerson{ privateStringname; privateIntegerorder; /** *@returnthename */ publicStringgetName(){ returnname; } /** *@paramname *thenametoset */ publicvoidsetName(Stringname){ this.name=name; } /** *@returntheorder */ publicIntegergetOrder(){ returnorder; } /** *@paramorder *theordertoset */ publicvoidsetOrder(Integerorder){ this.order=order; } }2)、测试类
publicstaticvoidmain(String[]args){ List<Person>listA=newArrayList<Person>(); Personp1=newPerson(); Personp2=newPerson(); Personp3=newPerson(); p1.setName("name1"); p1.setOrder(1); p2.setName("name2"); p2.setOrder(2); p3.setName("name3"); p3.setOrder(3); listA.add(p2); listA.add(p1); listA.add(p3); //直接在这里添加我们的排序规则 Collections.sort(listA,newComparator<Person>(){ publicintcompare(Personarg0,Personarg1){ returnarg0.getOrder().compareTo(arg1.getOrder()); } }); for(Personp:listA){ System.out.println(p.getName()); } }从上面看到,直接在Conllections.sort()方法中重写了一个Comparator接口,可以在不同的地方使用Person集合的不同排序方法。如上面还是按照Person的order属性升序排列,我只要改写该方法,就可以在其他地方按照其他的规则对我的list集合进行排序,但是这样子代码看起来会比前面的那种方式繁琐。
3)、结果
name1 name2 name3致谢:感谢您的阅读!
本文内容总结:
原文链接:https://www.cnblogs.com/0201zcr/p/5395639.html