你能从一个通用类型的对象中覆盖一个函数吗?
Can you override a function from a generically typed object?
我在 Java 中有一个 class,它在 HashMap 中存储通用 Object
类型:
private final Map<Object, NetworkMarker> packetMarker = new WeakHashMap<>();
packet
对象非常大,映射具有非常高的吞吐量,因此仅对数据包进行哈希处理就占用了荒谬的 cpu 周期,我很好奇是否可能尽量减少这种情况,或者我只需要更好的硬件。
尽管是一个没有包装器的通用对象 class,是否有一种方法可以覆盖 hashCode
函数以使其更高效,或者可以扩展哈希图以增强 #get()
方法?或者我忽略的任何其他方法!
干杯!
编辑澄清:packet
对象未键入。它的类型是Object
。它是从外部源传入的,所以我无法分配类型。
您总是可以将其包装在另一个缓存哈希码的 class 中:
class CachedHash {
public final Object cached;
private Integer hashCode;
public CachedHash(Object cached) {
this.cached = cached;
}
@Override
public boolean equals(Object o) {
return cached.equals(o);
}
@Override
public int hashCode() {
if (hashCode == null) {
hashCode = cached.hashCode();
}
return hashCode;
}
}
我在 Java 中有一个 class,它在 HashMap 中存储通用 Object
类型:
private final Map<Object, NetworkMarker> packetMarker = new WeakHashMap<>();
packet
对象非常大,映射具有非常高的吞吐量,因此仅对数据包进行哈希处理就占用了荒谬的 cpu 周期,我很好奇是否可能尽量减少这种情况,或者我只需要更好的硬件。
尽管是一个没有包装器的通用对象 class,是否有一种方法可以覆盖 hashCode
函数以使其更高效,或者可以扩展哈希图以增强 #get()
方法?或者我忽略的任何其他方法!
干杯!
编辑澄清:packet
对象未键入。它的类型是Object
。它是从外部源传入的,所以我无法分配类型。
您总是可以将其包装在另一个缓存哈希码的 class 中:
class CachedHash {
public final Object cached;
private Integer hashCode;
public CachedHash(Object cached) {
this.cached = cached;
}
@Override
public boolean equals(Object o) {
return cached.equals(o);
}
@Override
public int hashCode() {
if (hashCode == null) {
hashCode = cached.hashCode();
}
return hashCode;
}
}