対象並べ替え:Comprator&Comprable


セットに格納されているのがすべて対象の場合、私たちはそれを並べ替えるために、CompratorまたはCompparableを利用して、オブジェクトの並べ替えやカスタムの並べ替えを簡単に行う必要があります。
例:オブジェクトクラス:
public class UserPo  {
	//   
	private String name;
	//   
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}
 
1:Compratorインターフェースを使用して並べ替えを実現する:compre方法を実現し、第一パラメータが小さいか、等しいか、または第二パラメータより大きいかによって、それぞれ負の整数、ゼロまたは正の整数を返してサイズを判断する。     オブジェクトの並べ替えを強制的に行う比較関数です。Collection s.sortまたはArays.sortのようなCoparatorをsort方法に渡すことができ、順序付けの正確な制御を可能にする。Compratorを使用して、順序setまたは規則的マッピングのようないくつかのデータ構造の順序を制御したり、自然順序のないオブジェクトのcollectionの順序を提供したりすることもできる。
import java.util.Comparator;

public class MyCompare implements Comparator<Object>{
	
	public int compare(Object o0, Object o1) {
		UserPo user0 = (UserPo) o0;
		UserPo user1 = (UserPo) o1;
		if (user0.getAge() > user1.getAge()) {
			return 1; //         
		} else if (user0.getAge() < user1.getAge()) {
			return -1;//         
		} else {
			return 0; //   
		}
	}
}
 
テストコード:
import java.util.ArrayList;
import java.util.Collections;

public class Test {

	public static void main(String args[]){
		
		String sql="select name,age from users";
        //                 
		ArrayList<UserPo> array =BaseDao.getyAll(sql);
		MyCompare comp = new MyCompare();
        //       
		Collections.sort(array,comp);
		for(UserPo p:array) {
			System.out.println(p.getName()+":"+p.getAge());
		}
		
	}
}
 
get All()方法:
public static ArrayList<UserPo> getyAll(String sql) {
        ArrayList<UserPo> list = new ArrayList<UserPo>(); 
        ResultSet rs = null;
        PreparedStatement ps = null;
        try {
            Connection con = JdbcUtils.getMsConnection();
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
            	UserPo p = new UserPo();
            	p.setName(rs.getString("name"));
                p.setAge(rs.getInt("age"));
                list.add(p);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    
 
2:Commparableインターフェースを使用して並べ替えを完了します。このインターフェースを実現する対象リストはCollection s.sort(およびArays.sort)によって自動的に並べ替えられます。このインターフェースを実装するオブジェクトは、コンパレータを指定することなく、規則的なマッピングにおけるキーまたは規則的なセットの要素として使用することができる。
 
UserPo類を改ぞうします。
import java.util.ArrayList;
import java.util.Collections;
public class UserPo implements Comparable  {
	
	private String name;
	
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
    /**
     * compareTo
     */
	public int compareTo(Object o) {
		return this.age-((UserPo)o).getAge();
	}
    //   
	public static void main(String args[]){
		String sql="select name,age from users";
		ArrayList<UserPo> array =BaseDao.getyAll(sql);
		//       
		Collections.sort(array);
		for(UserPo p:array) {
			System.out.println(p.getName()+":"+p.getAge());
		}
	}
}
 
この2つのインターフェースの比較:1:Comprableは集合内部で定義された方法で実施された順序付けであり、Compratorは集合外部で実現された順序付けである。1つのクラスがCamparableインターフェースを実現すると、このタイプのオブジェクト同士が相互に比較可能であることを示し、このようなオブジェクトからなるセットは直接sort方法で並べ替えることができる。私たちが書いたbeanはこのインターフェースを実現します。これも標準javabeanの規範です。3:Compratorはアルゴリズムの実現と見なし、アルゴリズムとデータを分離し、Compratorも次の2つの環境で使用できます。     1、類のデザイナーは比較問題を考慮していないで、Comprableを実現していません。Compratorを通じて並べ替えを実現できます。対象自体を変えなくてもいいです。     2、昇順、降順などの各種の並べ替え基準を使用することができます。