JAVA 排序自定義型別元素集合
阿新 • • 發佈:2018-11-09
排序程式碼
public class Collection_sort3 {
public static void main(String[] args) {
List <Points> list = new ArrayList<Points>();
list.add(new Points(3,4));
list.add(new Points(2,1));
list.add(new Points(5,8));
list.add(new Points(6,3));
list.add(new Points(5,6));
System.out.println(list);
/**
* sort方法要求排序的集合元素必須實現
* Comparable 接口才可以排序。
*
*/
Collections.sort(list);
System.out.println(list);
}
}
類的定義
public class Points implements Comparable<Points>{
private int a;
private int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public Points(int a, int b) {
super();
this.a = a;
this .b = b;
}
public String toString(){
return "("+a+","+b+")";
}
/**
* 該方法是定義當前物件this,與給定物件o 之間的大小關係
* 方法返回一個int 值。該值並不關心具體值,只關心取值範圍
* 當:
* 返回值>0: 當前物件大於引數物件(this>o)
* <0: 小於
* 返回值=0: 倆個物件相等
*
*/
@Override
public int compareTo(Points o) {
int len=this.a*this.a+this.b*this.b;
int olen =o.a*o.a+o.b+o.b;
return len-olen;
}
}
程式碼優化
import java.util.Comparator;
/**
* Collection提供了一個過載的sort:
* 該方法跟推薦使用,有倆優點:
* 1 :不要求元素必須實現Comparable介面,減少對我們程式碼的侵入性
* 2 :當元素已經實現了Comparable介面,如:String這樣的類
* 但是其提供的比較大小規則不滿足我們對排序的需求時,
* 也可以使用這個過載的sort方法解決。
*
* 該過載的sort方法要求除了傳入要排序的集合外,還要傳入一個額外的比較器
* ,使用它的比較集合元素。
*
*/
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Collrction_sort4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List <String> list = new ArrayList<String>();
list.add("12555");
list.add("123");
list.add("1234");
System.out.println(list);
/**
* 過載的sort不要求元素實現Comparable介面,若已經實現了也
* 不會根據元素的比較大小規律排序
*/
Collections.sort(list,new Comparator<String>(){
public int compare(String o1,String o2){
return o1.length()-o2.length();
}
});
System.out.println(list);
}
}
排序結果