gpt4 book ai didi

java - 字节格式的 longs 的快速(呃)比较?

转载 作者:行者123 更新时间:2023-11-29 04:54:50 27 4
gpt4 key购买 nike

我有一个包含 byte[] 键的键值存储。其中一些键将用于多头(多头本身,还有 Localdate 和 LocalTime 实例)。

我有一个非常干净的比较器,使用标准的 Java 和 Guava:

    @Override
public int compare(byte[] left, byte[] right) {
long leftLong = Longs.fromByteArray(left);
long rightLong = Longs.fromByteArray(right);
return Long.compare(leftLong, rightLong);
}

但它比我预期的要慢。排序 100,000 个长整型需要 100 毫秒,而排序 100,000 个整型需要 6 毫秒。

有没有更快的方法来比较两个长整型,也许是通过避免 int 转换?

(您可能想知道它是否真的需要更快。如果可能的话是的,因为它会在每次搜索、扫描、插入和删除 long、日期等到存储中时调用。)

最佳答案

我并不惊讶它需要很长时间:分配和销毁一万亿个小对象似乎很费力。为什么不直接比较数组本身?

public int compare(byte[] left, byte[] right) {
int cmp = 0;
for(int i = 0; i < 8 && cmp == 0; i++) {
cmp = (i == 0 || (left[i] >= 0 == right[i] >= 0)) ? left[i] - right[i] : right[i] - left[i]
}
return cmp;
}

关于java - 字节格式的 longs 的快速(呃)比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com