Salve a tutti
ho sviluppato un semplice programma che utilizza una hashmap popolandola di oggetti che hanno due attributi come chiave e due attributi (gli stessi per facilitarmi lo sviluppo) come attributo...

il problema è che quando faccio una ricerca, settando prima la coppia da cercare, non mi trova l'oggetto e per di più mi stampa a video quello che scrivo (quando non dovrebbe scrivere nulla)...

ecco la classe classmappa.java che definisce il tipo di oggetti che inserisco nella mappa
codice:
public class classmappa {

	private int state;
	private String message;
	
	public void setState ( int state ){
		this.state = state;
	}
	
	public int getState() {
		return this.state;
	}
	
	public void setMessage (String message) {
		this.message = message;
	}
	
	public String getMessage() {
		return this.message;
	}
	
}
ed ecco la classe provamappa.java che utilizza classmappa come tipo per gli oggetti della mappa
codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class provamappa {
        static Map mappa = new HashMap();
	private static String[] alfa = { "zero", "uno", "due" };
	private static int i;
	static classmappa i1 = new classmappa();
	static classmappa i2 = new classmappa();
	
	public static void main(String[] args) {
		String input = null;
		
		// popolo la mappa
		for (i=0; i<3; i++) {
			i1.setState(i);
			i1.setMessage(alfa[i]);
			mappa.put(i1, i1);	// inserisco nella mappa la chiave e il valore 
                                                          // appena settati
			
			i2 = (classmappa) mappa.get(i1);
			System.out.println(i2.getState()+ " "+i2.getMessage());
                        // qui stampa a schermo quanto appena inserito, output corretto!!
		}
		
		// visualizzazione con input da tastiera: mi stampa quello che scrivo
		BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
		for (i=0; i<3; i++) {
			try {
				i1.setMessage((String) stdIn.readLine());
			} catch (IOException e) {
				e.printStackTrace();
			}
			i1.setState(i);

			if (mappa.containsKey(i1))   // controllo se esiste una chiave 
                        {                                         
				i2 = (classmappa) mappa.get(i1);
				System.out.println(i2.getMessage());
			}
                }
       }
}
il "gioco" sarebbe inserire una stringa da tastiera e se stringa AND intero coincidono con la chiave allora mi stampa a schermo il valore, mentre se non contiene la chiave non deve stampare nulla....considerando anche che l'intero è sempre fornito dal ciclo for...
invece, come già detto, il containsKey restituisce sempre true, anche se da tastiera scrivo "sette", e mi restituisce quello che scrivo (e non l'oggetto della mappa)....

un grazie a tutti quelli che mi daranno una mano, è un bel po che ci sto sbattendo la testa