如果这太简单的问题。
考虑以下类:
public class Asset {
private int id;
private UUID uuid;
}
如果我要根据其ID检查大量资产对象的平等,这在性能方面更有效,ID与UUID?
渐近上都是恒定时间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
字段类型的比较。
编辑:感谢Chai T. Rex提及该问题int
因此,两个int
的平等再次是直接的(==)和恒定时间。