ホームページ > Java > &#&チュートリアル > Java でオブジェクトの ArrayList のカスタム並べ替えを実装するにはどうすればよいですか?

Java でオブジェクトの ArrayList のカスタム並べ替えを実装するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-30 07:47:40
オリジナル
371 人が閲覧しました

How to Implement Custom Sorting for an ArrayList of Objects in Java?

オブジェクトの ArrayList のカスタム並べ替え

最新のアプリケーションでデータを管理する場合、多くの場合、特定の基準に従ってオブジェクトを並べ替える必要があります。並べ替えによりデータの可読性が向上し、データの検索が容易になり、操作が合理化されます。一般的なシナリオの 1 つは、カスタムの並べ替え順序を使用してオブジェクトの ArrayList を並べ替えることです。

連絡先を ArrayList に保存するアドレス帳アプリケーションがあるとします。各連絡先には、名前、自宅番号、携帯電話番号、住所のフィールドが含まれます。連絡先を名前で並べ替えるには、カスタム並べ替え関数を定義する必要があります。

自然順序付けの定義

特定のフィールドによる並べ替えが自然な要件である場合は、 Contact クラスでは、クラス内に Comparable インターフェイスを実装できます。以下に例を示します。

public class Contact implements Comparable<Contact> {

    private String name;

    // getters, setters, and other boilerplate

    @Override
    public int compareTo(Contact other) {
        return name.compareTo(other.name);
    }
}
ログイン後にコピー

Comparable を実装すると、Contact クラスの自然な順序が確立されます。つまり、Collections.sort() メソッドを使用して、名前フィールドで ArrayList を並べ替えることができます。

List<Contact> contacts = new ArrayList<>();

// Fill the list with contacts

Collections.sort(contacts);
ログイン後にコピー

外部注文の定義

必要な場合自然な順序以外のフィールドで並べ替える場合は、コンパレーターを作成できます。コンパレータは、外部の制御可能な並べ替えメカニズムを提供します。

Collections.sort(contacts, new Comparator<Contact>() {
    public int compare(Contact one, Contact other) {
        return one.getAddress().compareTo(other.getAddress());
    }
});
ログイン後にコピー

ここでは、デフォルトの名前フィールドではなくアドレスで並べ替えています。

コンパレータの再利用

複数のコンパレーターを作成しないようにするには、Contact クラス内でコンパレーターを定義できます。それ自体:

public class Contact {

    // getters, setters, and other boilerplate

    public static Comparator<Contact> COMPARE_BY_PHONE = new Comparator<Contact>() {
        public int compare(Contact one, Contact other) {
            return one.phone.compareTo(other.phone);
        }
    };
}
ログイン後にコピー

これで、事前定義されたコンパレーターを使用して電話でソートできるようになります:

Collections.sort(contacts, Contact.COMPARE_BY_PHONE);
ログイン後にコピー

汎用 Bean コンパレーター

汎用ソート用、BeanComparator の使用を検討してください:

public class BeanComparator implements Comparator<Object> {

    private String getter;

    public BeanComparator(String field) {
        this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1);
    }

    public int compare(Object o1, Object o2) {
        // ... implementation ...
    }
}
ログイン後にコピー

これにより、任意の Bean フィールドによる並べ替え:

Collections.sort(contacts, new BeanComparator("phone"));
ログイン後にコピー

カスタム 並べ替えを実装すると、ArrayList の並べ替え方法を制御できるようになり、データ操作がより効率的になり、特定のアプリケーション要件に合わせやすくなります。

以上がJava でオブジェクトの ArrayList のカスタム並べ替えを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート