I define my class as:
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);
}
}
I also define an array containing the key of the object. For instance:
Object arr[] = new Object[100];
Key<String> k = new Key<>("a","b");
int h = k.hashcode();
...
arr[h+i % h] = k;
The problem is that hashcode () can return a negative value, so
arr[h+i % h] = k;
may return an error from the array index. This is why I changed my code as (based on my search to avoid hashcode () to return a negative value):
@Override
public int hashCode() {
return (Objects.hash(q,o)&0x7FFFFFFF);
}
So, if I do this, will the even distribution of the hash code () change or not? I mean that the probability of having the same value from two different objects will be increased or not?
source
share