2017-03-03 3 views
0

Entschuldigung, wenn dies eine zu einfache Frage ist.Effizienz: UUID vs Int-Vergleich in Java

die folgende Klasse vor:

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

Wenn ich die Gleichheit von einer großen Anzahl von Vermögen auf ihrer Id-Objekte basierend zu überprüfen, das effizienten in Bezug auf Leistung ist, id vs UUID?

+1

warum versuchst du es nicht und siehst es. –

+2

Definieren Sie "große Zahl". Wenn es weniger als sagen wir 100.000.000 ist, wird die Leistungsdifferenz wahrscheinlich minimal sein. Mit anderen Worten: Machen Sie sich keine Gedanken darüber, es sei denn, Sie haben eindeutige Beweise dafür, dass dieser Vergleich Performance-Probleme verursacht. Vorzeitige Optimierung und all das ... –

+3

Die [Antwort von Chaurasia] (http:// Stackoverflow.com/a/42571827/642706) scheint richtig und präzise. Allgemeiner würden Sie nicht zwischen einer "int" und einer "UUID" basierend auf der Leistung wählen. In der Praxis müssen Sie entweder die Identität eines Objekts über Zeit und Raum (Raum bedeutet mehrere Software- und/oder Hardwaresysteme) verfolgen und eine "UUID" verwenden, oder Sie müssen ein Objekt innerhalb eines kleinen Bereichs kurz verfolgen und ein 'int' (oder ein' UUID' nur für den Teufel oder vielleicht zukunftssicher). –

Antwort

1

Asymptotisch sind beide konstante Zeit O(1) Vergleiche.

UUID unterhält höchstwertigen 64 Bits und am wenigsten signifikante 64 Bits und vergleicht sie. Hier ist die equals() Methode.

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); 
} 

Und Integer-Gleichheit ist auch konstante Zeit.

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

Aber es sollte beachtet werden, dass UUID Vergleich Vergleich von 2 long Art der Felder enthält.

EDIT: Dank Chai T. Rex für diese Frage zu erwähnen, fragt nach int
So die Gleichheit zweier int wieder einfach ist (==) und konstante Zeit.

+1

Eine kleine Sache: die Frage verwendet '' 'anstelle von' Integer's –

+0

@ ChaiT.Rex bearbeitet. Vielen Dank. –