1. 程式人生 > >JAVA 排序自定義型別元素集合

JAVA 排序自定義型別元素集合

排序程式碼

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);
    }

}

排序結果
這裡寫圖片描述