javaのセットを並べ替える2つの方法

26379 ワード

javaセットのツールクラスCollectionでは、2つの順序付けの方法が提供され、それぞれ:
1.collection.sort 2.Collection.sort(List list、Comprator c)の第一号は自然並べ替えといい、並べ替えに参加する対象はcomprableインターフェースを実現し、そのcompreTo()方法を書き換え、方法体の中で対象の比較的大きさ規則を実現します。例は以下の通りです。
package test;

public class Emp 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;
    }
    public Emp() {
     
        super();
    }
    public Emp(String name, int age) {
     
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
     
        return "Emp [name=" + name + ", age=" + age + "]";
    }
    @Override
    public int compareTo(Object o) {
     
        if(o instanceof Emp){
     
            Emp emp = (Emp) o;
//          return this.age-emp.getAge();//        
            return this.name.compareTo(emp.getName());//       
        }
        throw new ClassCastException("     Emp     ...");
    }

}
第二はカスタム順序付けといい、またはカスタム順序付けといい、匿名内部クラスを作成し、まずnew Compratorインターフェースのコンパレータオブジェクトcを作成し、同時にcompare()の方法を実現する。コンパレータオブジェクトcをCollection.sort()メソッドのパラメータリストに転送し、ソート機能を実現する。
説明:第一の方法はあまり柔軟ではないです。本体類はcomprableインターフェースを実現した後、結合を増加します。プロジェクトの中で異なる位置によって並べ替え方法を呼び出す必要がある場合、反復的に比較規則を修正しなければなりません。両者は一つを選ぶしかなく、衝突が起きます。第二の種類はよく解決しました。必要なところで、内部クラスの例を作成し、その比較方法を書き換えてもいいです。
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

public class TestSort {
     

    static List list = new ArrayList();
    //@BeforeClass                      ,
    //      .@Before                   ;
    //            ,    @BeforeClass.
    @BeforeClass
    public static void init(){
     
        list.add(new Emp("tom",18));
        list.add(new Emp("jack",20));
        list.add(new Emp("rose",15));
        list.add(new Emp("jerry",17));
        System.out.println("   :");
        for(Object o : list){
     
            System.out.println(o);
        }
    }

    /** age    */
//  @Test
//  public void testSortAge(){
     
//      Collections.sort(list);
//      System.out.println("     age   :");
//      for(Object o : list){
     
//          System.out.println(o);
//      }
//  }
//  
    /** name    */
    @Test
    public void testSortName(){
     
        Collections.sort(list);
        System.out.println("     name     :");
        for(Object o : list){
     
            System.out.println(o);
        }
    }

    /**  Comparator    age    */
    @Test
    public void testComparatorSortAge(){
     
        Collections.sort(list,new Comparator () {
     
            @Override
            public int compare(Object o1, Object o2) {
     
                if(o1 instanceof Emp && o2 instanceof Emp){
     
                    Emp e1 = (Emp) o1;
                    Emp e2 = (Emp) o2;
                    return e1.getAge() - e2.getAge();
                }
                throw new ClassCastException("     Emp  ");
            }
        });
        System.out.println("  Comparator    age     :");
        for(Object o : list){
     
            System.out.println(o);
        }
    }
    /**  Comparator    name    */
    @Test
    public void testComparatorSortName(){
     
        Collections.sort(list,new Comparator () {
     
            @Override
            public int compare(Object o1, Object o2) {
     
                if(o1 instanceof Emp && o2 instanceof Emp){
     
                    Emp e1 = (Emp) o1;
                    Emp e2 = (Emp) o2;
                    return e1.getName().compareTo(e2.getName());
                }
                throw new ClassCastException("     Emp  ");
            }
        });
        System.out.println("  Comparator    name     :");
        for(Object o : list){
     
            System.out.println(o);
        }
    }

}
実行結果:
   :
Emp [name=tom, age=18]
Emp [name=jack, age=20]
Emp [name=rose, age=15]
Emp [name=jerry, age=17]
     name     :
Emp [name=jack, age=20]
Emp [name=jerry, age=17]
Emp [name=rose, age=15]
Emp [name=tom, age=18]
  Comparator    age     :
Emp [name=rose, age=15]
Emp [name=jerry, age=17]
Emp [name=tom, age=18]
Emp [name=jack, age=20]
  Comparator    name     :
Emp [name=jack, age=20]
Emp [name=jerry, age=17]
Emp [name=rose, age=15]
Emp [name=tom, age=18]
回転:https://www.cnblogs.com/huangjinyong/p/9037588.html