7

だから私はJavaでオブジェクトの配列リストが欲しい.

と、などがobject1.numberありますが、これらのオブジェクトには、、 などの 以外のプロパティがあります。object2.numberobject3.numbernumbernamedistance

したがって、文字列を aarrayでソートする場合は、文字列を a に入れtemporal、他の文字列をその場所に置きます...しかし、araryListオブジェクトのでは、どうすればできますか?

オブジェクトを配列のその位置に移動することはできますか?

ありがとう。

4

6 に答える 6

8

独自の比較子を実装します。

Arrays.sort(yourArray, new Comparator<YourClass>() {
        @Override
        public int compare(YourClass o1, YourClass o2) {
            //compare object properties
        }
});
于 2012-04-13T17:36:50.973 に答える
4

同等のインターフェースを実装する必要があります

implements Comparable

仕事をする方法は

public int compareTo(Object obj)
{
}

object は、implements ステートメントで使用できる一般的な構文のため、完全な on 型に置き換えられることが多いことに注意してください (以下を参照)。

完全な例はチュートリアルのドキュメントにあります。これが役立つことを願っています

完全な例 (上記のリンクから取得したものは次のとおりです)、ある時点でリンクが機能しなくなった場合に備えて、これを追加しました

import java.util.*;

public class Name implements Comparable<Name> {
    private final String firstName, lastName;

    public Name(String firstName, String lastName) {
        if (firstName == null || lastName == null)
            throw new NullPointerException();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String firstName() { return firstName; }
    public String lastName()  { return lastName;  }

    public boolean equals(Object o) {
        if (o == null || !(o instanceof Name))
            return false;
        Name n = (Name) o;
        return n.firstName.equals(firstName) && n.lastName.equals(lastName);
    }

    public int hashCode() {
        return 31*firstName.hashCode() + lastName.hashCode();
    }

    public String toString() {
    return firstName + " " + lastName;
    }

    public int compareTo(Name n) {
        int lastCmp = lastName.compareTo(n.lastName);
        return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
    }
}

この記事のクライアント コードは次のとおりです。

import java.util.*;

public class NameSort {
    public static void main(String[] args) {
        Name nameArray[] = {
            new Name("John", "Smith"),
            new Name("Karl", "Ng"),
            new Name("Jeff", "Smith"),
            new Name("Tom", "Rich")
        };

        List<Name> names = Arrays.asList(nameArray);
        Collections.sort(names);
        System.out.println(names);
    }
}
于 2012-04-13T17:34:41.357 に答える
0

あなたの質問に基づいて、ソートアルゴリズムを自分で実装することになっていると思います。その場合、ArrayList 内の要素の位置を操作できます。通常の配列とは少し異なる動作をするだけです。をご覧くださいadd(int index, E element)indexパラメータを使用すると、ArrayList 内のどこに要素を追加するかを決定できます。

于 2012-04-13T17:36:16.413 に答える
0

従来の配列のように ArrayList のエントリを操作するには、ArrayList.set(int, E) を使用します。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#set%28int,%20E%29

于 2012-04-13T17:37:53.843 に答える
0

Collections.sort()Java 8 で ArrayList をソートするために使用します。

Collections.sort(array, new Comparator<Class>() {
    @Override
    public int compare(Class o1, Class o2) {
        //compare object properties
    }
});
于 2014-11-19T17:07:32.470 に答える
0

この目的のためにコンパレータを使用する必要があります。

于 2012-04-13T17:34:24.067 に答える