Salve a tutti!
Una domanda. Non ho capito se la classe Map è una classe astratta o può essere utilizzata direttamente .Ho provato ad utilizzarla ma quando aggiungo (put) un elemento mi genera un errore che segnala che sto aggiungendo un elemento nullo (ma non è così) . Utilizzando invece la classe HashMap , riesco poi a procedere .

Il programma è questo (giusto a titolo di esempio)
codice:
import java.util.*;
public class Codifica {
 private Map<Character, Character> mappa ;
  public Codifica(){
	    mappa=new HashMap<Character, Character>();
		 mappa.put('a', 'd');
		 mappa.put('b', 'a');
		 mappa.put('c', 'f');
		 mappa.put('d', 'r');
		 mappa.put('e', 'z');
		 mappa.put('f', 'i');
		 mappa.put('g', 'l');
		 mappa.put('h', 'p');
		 mappa.put('i', 'x');
		 mappa.put('j', 's');
		 mappa.put('k', 'b');
		 mappa.put('l', 'z');
		 mappa.put('m', 'u');
		 mappa.put('n', 'c');
		 mappa.put('o', 'j');
		 mappa.put('p', 'e');
		 mappa.put('q', 'g');
		 mappa.put('r', 'v');
		 mappa.put('s', 'h');
		 mappa.put('t', 'y');
		 mappa.put('u', 'w');
		 mappa.put('v', 'm');
		 mappa.put('w', 'o');
		 mappa.put('x', 'k');
		 mappa.put('y', 'q');
		 mappa.put('z', 'n');
  }
 public char applica(char lettera){
	return mappa.get(lettera); 
 }
 public void getString(String stringa){
	int size = stringa.length();
	char[] caratteri = stringa.toCharArray();
	 for(int i = 0;i<size;i++){
		 System.out.print(applica(caratteri[i]));
	 }
	System.out.println("\r\n---------------------"); 
 }
 public static void main(String[] argv){
	 Scanner IN = new Scanner(System.in);
	 System.out.println("inserire stringa");
	 String str = IN.nextLine();
	 Codifica cod = new Codifica();
	 cod.getString(str);
 }
}
Se istanziassi mappa come new Map , il put non funzionerebbe .
Grazie per eventual i risposte.