6

とにかく、JVM 内のすべてのオブジェクトのシーケンス/順序を定義して、2 つの異なるオブジェクト o1 または o2 に対して、o1 > o2 または o2 > o1 および o1 == o2 のいずれかである場合に限り、明確に定義されたルールがあるようにすることはできますか?それらが同じオブジェクトである場合は?

衝突なしの保証がある場合 (ない場合)、identityHashCode() の比較は良い候補です。

出生時間も機能します-どうにかしてそれを取得できれば。

何か案は?

ありがとうございました!

4

5 に答える 5

3

オブジェクトの独自のリポジトリを維持する立場にある場合は、を使用しWeakHashMap<Object, Long>て独自のシリアルIDを維持できます。

于 2011-04-11T07:45:33.823 に答える
1

Comparable<YourObject>インターフェイスとメソッドを実装する必要がありますcompareTo(YourObject obj)。compareTo(..)メソッドのコントラクトは、このオブジェクトがパラメーターとして渡されたオブジェクトよりも小さい場合は-1(-ve number)を返し、等しい場合は0を返し、このオブジェクトが大きい場合は+1(+ ve number)を返します。他のオブジェクトより。好きなフィールドを使用して比較を実装できます。

Collections.sort()または任意のlist.sort()を使用すると、このコンパレータを使用してリストが並べ替えられます。

お役に立てれば!

于 2011-04-11T07:32:54.267 に答える
0

このObject.toString()メソッドは、オブジェクトごとに異なる値を次の形式で返す必要があります。

getClass().getName() + '@' + Integer.toHexString(hashCode())

では、最初にgetClass()。getName()をアルファベット順に比較し、次にhashCode()を比較できますか?

于 2011-04-11T07:42:16.980 に答える
0

オブジェクトが同じタイプの場合、コンストラクターでそれらの作成番号を覚えておくことができます。

class A {
    private static long count = 0;
    private long objNumber;
    public A() {
        synchronized(A.class) {
            objNumber = count;
            count++;
        }
    }
}
于 2011-04-11T07:41:47.853 に答える