1、簡介
這個和數組的排序又不一樣了。
其實Java針對數組和List的排序都有實現,對數組而言,你可以直接使用Arrays.sort,對於List和Vector而言,你可以使用Collections.sort方法。
Java API針對集合類型的排序提供了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實體類
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
3、通過重載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
致謝:感謝您的閱讀!