效率:Java 中的 UUID 与 int 比较
Efficiency : UUID vs int comparison in Java
请原谅这个问题太简单了。
考虑以下 class:
public class Asset {
private int id;
private UUID uuid;
}
如果我要根据它们的 Id 检查大量 Asset 对象的相等性,这在性能方面更有效,id vs 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
的相等性又是直截了当的(==)和常数时间。
请原谅这个问题太简单了。
考虑以下 class:
public class Asset {
private int id;
private UUID uuid;
}
如果我要根据它们的 Id 检查大量 Asset 对象的相等性,这在性能方面更有效,id vs 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
的相等性又是直截了当的(==)和常数时间。