Я помню, что затмение и идея имеют этот шаблон для автоматического создания объекта hashCode на основе его атрибутов.
Одна из стратегий, если используется число и строка, выглядит примерно так.
return stringValue.hashCode() + intValue * 32;
Что-то вроде этого.
У меня нет ни затмения, ни идеи, и я бы хотел создать такую функцию.
ИЗМЕНИТЬ
Основываясь на ответах, я создаю этот мини-класс
class StringInt {
private final String s;
private final int i;
static StringInt valueOf( String string , int value ) {
return new StringInt( string, value );
}
private StringInt( String string, int value ) {
this.s = string;
this.i = value;
}
public boolean equals( Object o ) {
if( o != null && o instanceof StringInt ){
StringInt other = ( StringInt ) o;
return this.s == other.s && this.i == other.i;
}
return false;
}
public int hashCode() {
return s != null ? s.hashCode() * 37 + i : i;
}
}
Этот класс должен использоваться как ключ для большой карты памяти ( > 10k элементов). Я не хочу каждый раз перебирать их, чтобы определить, совпадают ли строки и int.
Спасибо.
ps.. mmh, вероятно, это должны быть имена StringIntKey.