2017-03-03 13 views
0

これはあまりにも簡単な質問です。私は、UUID対IDを、パフォーマンスの面で、より効率的である自分のIDに基づいて資産多数のオブジェクトの等価性をチェックするためだ場合効率:JavaでのUUIDとintの比較

public class Asset { 
    private int id; 
    private UUID uuid; 
} 

は、以下のクラスを考えてみましょうか?

+1

なぜあなたはそれを試してみてください。 –

+2

"大きい数"を定義してください。たとえば、100,000,000よりも少ない場合、パフォーマンスの差異は最小限に抑えられます。言い換えれば、この比較がパフォーマンス上の問題を引き起こしているというプロファイリングからの堅い証拠がない限り、心配しないでください。早期の最適化とそのすべて... –

+3

[回答のChaurasia](http://stackoverflow.com/a/42571827/642706)は正確で正確です。より一般的には、パフォーマンスに基づいて 'int'と' UUID'の間で選択することはありません。実際には、時間と空間(複数のソフトウェアやハードウェアシステムを意味するスペース)でオ​​ブジェクトのアイデンティティを追跡し、UUIDを使用するか、小さなスコープ内でオブジェクトを簡単に追跡し、 'int'(またはそれのちょうどいいところのための' UUID'、あるいは将来の校正のための 'UUID')です。 –

答えて

1

漸近的には両方とも一定時間O(1)の比較である。

UUIDは、の最上位64ビットおよびの最下位64ビットを維持して比較します。ここにはequals()メソッドがあります。

public boolean equals(Object obj) { 
    if ((null == obj) || (obj.getClass() != UUID.class)) 
     return false; 
    UUID id = (UUID)obj; 
    return (mostSigBits == id.mostSigBits && 
      leastSigBits == id.leastSigBits); 
} 

と整数の平等も一定時間です。

public boolean equals(Object obj) { 
    if (obj instanceof Integer) { 
     return value == ((Integer)obj).intValue(); 
    } 
    return false; 
} 

しかし、UUID比較はフィールドの2 longタイプの比較を含むことに留意すべきです。

EDIT:感謝チャイT.レックスその質問に言及するためのように、2つのintの平等が再び(==)、簡単かつ一定の時間は約int
を要求します。

+1

小さなものが1つあります:質問は整数型ではなく 'int'sを使用します –

+0

@ ChaiT.Rexが編集しました。ありがとう。 –

関連する問題