De manière asymptotique, les deux sont des comparaisons à temps constant O(1)
.
UUID
maintient 64 bits les plus significatifs et les bits les moins significatifs et les compare. Voici la méthode 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);
}
Et l'égalité des nombres est également un temps constant.
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Mais il convient de noter que UUID
comparaison comprend la comparaison de 2 long
type de champs.
EDIT: Chai merci T. Rex pour mentionner cette question interroge sur int
Ainsi, l'égalité de deux int
est à nouveau simple (==) et constante de temps.
pourquoi ne pas l'essayer et voir. –
Définir "grand nombre". Si elle est inférieure à, disons, 100 000 000, la différence de performance sera probablement minime. En d'autres termes, ne vous inquiétez pas à moins d'avoir des preuves tangibles du profilage que cette comparaison cause des problèmes de performance. L'optimisation prématurée et tout ça ... –
La [Réponse de Chaurasia] (http://stackoverflow.com/a/42571827/642706) semble correcte et précise. Plus généralement, vous ne choisiriez pas entre un 'int' et un' UUID' basé sur la performance. En pratique, soit vous devez suivre l'identité d'un objet à travers le temps et l'espace (espace signifiant plusieurs logiciels et/ou systèmes matériels) et utiliser un UUID, ou vous devez suivre un objet brièvement dans un petit périmètre et utiliser un 'int' (ou un' UUID' juste pour le diable, ou peut-être futur-proofing). –