Créer de hachage à partir de string et int

Je me souviens de l'éclipse et l'idée d'avoir ce modèle pour créer automatiquement un objet hashCode en fonction de ses attributs.

L'une des stratégies si un nombre et une chaîne de caractères est utilisée, c'est quelque chose comme cela.

  return stringValue.hashCode() + intValue * 32;

Ooor quelque chose comme ça.

Je n'ai pas ni de l'éclipse ou de l'idée à la main et je voudrais créer une telle fonction.

MODIFIER

Sur la base des réponses, je créer ce mini-classe

    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;
        }
    }

Cette classe est utilisé comme clé pour un grand plan de mémoire ( > 10k éléments ) je ne veux pas réitérer à chaque fois pour savoir si la Chaîne et de les int sont les mêmes.

Merci.

ps.. mmh probablement, il devrait être des noms StringIntKey.

Oscar, je pense que c'est une bonne classe. La méthode hashCode est clair, fiable et performant. Ce sur la prévention de la chaîne de valeur null? Dans votre constructeur, jeter un NPE si elle est nulle. Ensuite, vous pouvez supprimer ceux null gardes en equals et hashCode. Enfin, gardez une copie de "Effective Java" à portée de main pour des questions comme celles-ci. Les méthodes hashCode créé par Eclipse et l'IDÉE sont basées sur un livre.
Dans votre méthode equals devrait être la comparaison de la chaîne d'utilisation est égale au lieu de ==.

OriginalL'auteur OscarRyz | 2009-07-30