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.
warum versuchst du es nicht und siehst es. –
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 ... –
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). –