2017-03-03 1 views
0

Excusez si c'est une question trop simple.Efficacité: UUID vs comparaison int en Java

Tenir compte de la classe suivante:

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

Si je dois vérifier l'égalité d'un grand nombre d'objets actifs en fonction de leur Id, ce qui est plus efficace en termes de performance, id vs UUID?

+1

pourquoi ne pas l'essayer et voir. –

+2

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 ... –

+3

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). –

Répondre

1

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.

+1

Une petite chose: la question utilise 'int's plutôt que' Integer's –

+0

@ ChaiT.Rex édité. Merci. –