一、簡介java
這個和數組的排序又不同了。數組
其實Java針對數組和List的排序都有實現,對數組而言,你能夠直接使用Arrays.sort,對於List和Vector而言,你可使用Collections.sort方法。ide
Java API針對集合類型的排序提供了2個方法:測試
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)
若是集合裏面的元素都是相同類型的,而且實現了Comparable接口,那麼能夠直接調用第一個方法。this
若是你有其它的排序的想法,好比你不想按照天然排序進行,還能夠傳一個Comparator過去,好比反向。spa
元素不相同的狀況比較複雜,能夠暫時不用考慮。code
二、經過實現Comparable接口來實現list的排序blog
假如如今咱們有一個Person類的list集合,要讓其按照一個Order屬性進行排序,咱們可讓Person類實現Comparable接口,重寫其CompareTo方法便可。具體實現以下:排序
1)、Person實體類接口
public class Person implements Comparable<Person> { private String name; private Integer order; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the order */ public Integer getOrder() { return order; } /** * @param order * the order to set */ public void setOrder(Integer order) { this.order = order; }
@Override public int compareTo(Person arg0) { return this.getOrder().compareTo(arg0.getOrder()); //這裏定義你排序的規則。 } }
經過重寫Comparable接口的compareTo方法,可讓程序按照咱們想要的排列方式進行排序,如:這裏我讓Person按照order屬性升序排序。
2)、測試類
public static void main(String[] args) { //初始化數據 List<Person> listA = new ArrayList<Person>(); Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); 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 (Person p : listA) { System.out.println(p.getName()); } }
3)、結果:
name1
name2
name3
三、經過重載Collections.sort方法
直接重載java.util.Collections.sort(java.util.List, java.util.Comparator) 方法。能夠靈活的修改咱們排序的方式,具體實現以下:
1)、Person實體類
和上面的類相同,但沒實現Comparable接口
public class Person { private String name; private Integer order; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the order */ public Integer getOrder() { return order; } /** * @param order * the order to set */ public void setOrder(Integer order) { this.order = order; } }
2)、測試類
public static void main(String[] args) { List<Person> listA = new ArrayList<Person>(); Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); 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, new Comparator<Person>() { public int compare(Person arg0, Person arg1) { return arg0.getOrder().compareTo(arg1.getOrder()); } }); for (Person p : listA) { System.out.println(p.getName()); } }
從上面看到,直接在Conllections.sort()方法中重寫了一個Comparator接口,能夠在不一樣的地方使用Person集合的不一樣排序方法。如上面仍是按照Person的order屬性升序排列,我只要改寫該方法,就能夠在其餘地方按照其餘的規則對個人list集合進行排序,可是這樣子代碼看起來會比前面的那種方式繁瑣。
3)、結果
name1
name2
name3
致謝:感謝您的閱讀!