我基本上准备将短语放入数据库,它们可能会出错,所以我想要存储它们的短哈希(我将简单地比较它们是否存在,所以哈希是理想的).
我假设MD5在100,000多个请求上相当慢,所以我想知道什么是散列短语的最佳方法,可能推出我自己的哈希函数或使用hash('md4', '...'最终会更快?
我知道MySQL有MD5(),所以这会在查询结束时补充一点速度,但也许在MySQL中还有一个更快的哈希函数,我不知道这可以用于PHP ..
我已经读过Scala'a case class构造自动生成拟合equals和hashCode实现.生成的代码到底是什么样的?
对于Java中的某些散列函数,将值视为无符号整数(例如,与其他实现进行比较)会很好,但Java仅支持有符号类型.我们可以将签名转换为int"未签名" long,如下所示:
public static final int BITS_PER_BYTE = 8;
public static long getUnsignedInt(int x) {
ByteBuffer buf = ByteBuffer.allocate(Long.SIZE / BITS_PER_BYTE);
buf.putInt(Integer.SIZE / BITS_PER_BYTE, x);
return buf.getLong(0);
}
getUnsignedInt(-1); // => 4294967295
Run Code Online (Sandbox Code Playgroud)
但是,这个解决方案对我们真正做的事情来说似乎有些过分.有没有更有效的方法来实现同样的事情?
我把我的课定义为:
final class Key<T extends Comparable<T>> {
private final T q;
private final T o;
public Key(T q1, T o1) {
q = q1;
o = o1;
}
@Override
public boolean equals(Object obj) {
if(obj != null && obj instanceof Key) {
Key<T> s = (Key<T>)obj;
return q.equals(s.q) && o.equals(s.o);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(q,o);
}
}
Run Code Online (Sandbox Code Playgroud)
我还定义了一个包含对象键的数组.例如:
Object arr[] = new Object[100];
Key<String> k = new Key<>("a","b");
int h = k.hashcode();
...
arr[h+i …Run Code Online (Sandbox Code Playgroud)