codice:
public class GestioneMenu {
    public Hashtable<String,String> ht1 = new Hashtable<String,String>();
    public Hashtable<String,String> ht2 = new Hashtable<String,String>();
    public Hashtable<String,String> ht3 = new Hashtable<String,String>();
    public String comodo;
    public int var1=0;
    public int var2=0;
    public int progre=0;
    public String key1;
    public String key2;
    public String key3;
    public String righeMenu[][][];
    public String value1;
    public String value2;
    public String value3;
    public int codice4;
    public int riga4;
    public String descrizio4;
    public int codice3;
    public int riga3;
    public String descrizio3;
    public int codice2;
    public int riga2;
    public String descrizio2;
    public int codice1;
    public int riga1;
    public String descrizio1;
    public int codice0;
    public int riga0;
    public String descrizio0;
    public int interrogazione;
    public String comodokey;

    public GestioneMenu()
            {
            var1=0;
            var2=0;
            ht1.clear();
            ht2.clear();
            ht3.clear();
            }
    public String[][][] CreaMenu(ResultSet records){
   	    try {
              while (records.next()) {
                    codice4=records.getInt("COD_MENU_L4");
                    riga4=records.getInt("RIGA_MENU_L4");
                    descrizio4=records.getString("DESCRIZIONE_L4");
                    codice3=records.getInt("COD_MENU_L3");
                    riga3=records.getInt("RIGA_MENU_L3");
                    descrizio3=records.getString("DESCRIZIONE_L3");
                    codice2=records.getInt("COD_MENU_L2");
                    riga2=records.getInt("RIGA_MENU_L2");
                    descrizio2=records.getString("DESCRIZIONE_L2");
                    codice1=records.getInt("COD_MENU_L1");
                    riga1=records.getInt("RIGA_MENU_L1");
                    descrizio1=records.getString("DESCRIZIONE_L1");
                    codice0=records.getInt("COD_MENU_L0");
                    riga0=records.getInt("RIGA_MENU_L0");
                    descrizio0=records.getString("DESCRIZIONE_L0");
                    interrogazione=records.getInt("INTER_INTERROGAZ");
	              if (codice4 != 0) {
                     AggiungiCod4(codice4,riga4,descrizio4,codice3,riga3,descrizio3,codice2,riga2,descrizio2,codice1,riga1,descrizio1,codice0,riga0,descrizio0,interrogazione);
	              }
	              if ((codice3 != 0) && (codice4 == 0)) {
	                 AggiungiCod3(codice3,riga3,descrizio3,codice2,riga2,descrizio2,codice1,riga1,descrizio1,codice0,riga0,descrizio0,interrogazione);
	              }
	              if (codice2 != 0 && codice3 == 0 && codice4 == 0) {
	                 AggiungiCod2(codice2,riga2,descrizio2,codice1,riga1,descrizio1,codice0,riga0,descrizio0,interrogazione);
	              }
	              if (codice1 != 0 && codice2 == 0 && codice3 == 0 && codice4 == 0) {
	                 AggiungiCod1(codice1,riga1,descrizio1,codice0,riga0,descrizio0,interrogazione);
	              }
	              if (codice0 != 0 && codice1 == 0 && codice2 == 0 && codice3 == 0 && codice4 == 0) {
	                 AggiungiCod0(codice0,riga0,descrizio0,interrogazione);
	              }
              }
	      }
              catch( Exception e )
	      {
                  System.err.println("Eccezione if null: " + e.getMessage());
              }
        righeMenu = new String[ht1.size()][ht1.size()][ht1.size()];
        int a=0;
       	Enumeration en = ht1.keys();
		while (en.hasMoreElements()) {
		  key1 = (String)en.nextElement();
		  value1 = (String)ht1.get(key1);
		  value2 = (String)ht2.get(key1);
		  value3 = (String)ht3.get(key1);
		  righeMenu[a][0][0]=value3;
		  righeMenu[a][1][0]=value1;
		  righeMenu[a][1][1]=value2;
		  a++;
		}
		return righeMenu;
      }    
      
	public void AggiungiCod4(int cod4,int riga4,String descr4,int cod3,int riga3,String descr3,int cod2,int riga2,String descr2,int cod1,int riga1,String descr1,int cod0,int riga0,String descr0,int interroga){
		key1 = String.valueOf(cod4) + "|" + String.valueOf(riga4) + "|" + descr4;
		key2 = key1;
		key3 = key1;
		if (ht1.containsKey(key1) == true){
		try{
		 	comodo = (String)ht2.get(key2);
		 	comodo += ","+String.valueOf(interroga);
		 	ht2.put(key2,comodo);
		 	comodokey=(String)ht3.get(key2);
			key1 = String.valueOf(cod3) + "|" + String.valueOf(riga3) + "|" + descr3;
			key2 = key1;
			key3 = key1;
			if (ht1.containsKey(key1)==true){
		 	comodo = (String)ht2.get(key2);
		 	comodo += ","+String.valueOf(interroga);
		 	ht2.put(key2,comodo);
		 	comodokey=(String)ht3.get(key2);
		 	}else{
		 		ht1.put(key1,descr3);
		 		ht2.put(key2,String.valueOf(interroga));
		 		progre++;
		 		comodo = String.valueOf(progre) + "|" + String.valueOf(comodokey.substring(0,comodokey.indexOf("|")));
		 		ht3.put(key3,comodo);
		 	}
			key1 = String.valueOf(cod2) + "|" + String.valueOf(riga2) + "|" + descr2;
			key2 = key1;
			key3 = key1;
			if (ht1.containsKey(key1)==true){
		 	comodo = (String)ht2.get(key2);
		 	comodo += ","+String.valueOf(interroga);
		 	ht2.put(key2,comodo);
		 	comodokey=(String)ht3.get(key2);
		 	}else{
		 		ht1.put(key1,descr2);
		 		ht2.put(key2,String.valueOf(interroga));
		 		progre++;
		 		comodo = String.valueOf(progre) + "|" + String.valueOf(comodokey.substring(0,comodokey.indexOf("|")));
		 		ht3.put(key3,comodo);
		 	}
			key1 = String.valueOf(cod1) + "|" + String.valueOf(riga1) + "|" + descr1;
			key2 = key1;
			key3 = key1;
			if (ht1.containsKey(key1)==true){
		 	comodo = (String)ht2.get(key2);
		 	comodo += ","+String.valueOf(interroga);
		 	ht2.put(key2,comodo);
		 	comodokey=(String)ht3.get(key2);
		 	}else{
		 		ht1.put(key1,descr1);
		 		ht2.put(key2,String.valueOf(interroga));
		 		progre++;
		 		comodo = String.valueOf(progre) + "|" + String.valueOf(comodokey.substring(0,comodokey.indexOf("|")));
		 		ht3.put(key3,comodo);
		 	}
			key1 = String.valueOf(cod0) + "|" + String.valueOf(riga0) + "|" + descr0;
			key2 = key1;
			key3 = key1;
			if (ht1.containsKey(key1)==true){
		 	comodo = (String)ht2.get(key2);
		 	comodo += ","+String.valueOf(interroga);
		 	ht2.put(key2,comodo);
		 	comodokey=(String)ht3.get(key2);
		 	}else{
		 		ht1.put(key1,descr0);
		 		ht2.put(key2,String.valueOf(interroga));
		 		progre++;
		 		comodo = String.valueOf(progre) + "|" + String.valueOf(comodokey.substring(0,comodokey.indexOf("|")));
		 		ht3.put(key3,comodo);
		 	}
		 	}
		catch (NullPointerException e) {  
			System.err.println("Eccezione HT4m: " + e.getMessage()); 	
			}
 		}else{
        try{     
            progre++; 
	 		ht1.put(key1,descr4);
	 		ht2.put(key2,String.valueOf(interroga));
	 		var1=progre;
	 		comodo = String.valueOf(var1) + "|0";
	 		ht3.put(key3,comodo);
			key1 = String.valueOf(cod3) + "|" + String.valueOf(riga3) + "|" + descr3;
			key2 = key1;
			key3 = key1;
	 		ht1.put(key1,descr3);
	 		ht2.put(key2,String.valueOf(interroga));
	 		progre++;
	 		comodo = String.valueOf(progre) + "|" + String.valueOf(var1);
	 		ht3.put(key3,comodo);
	 		var1=progre;
			key1 = String.valueOf(cod2) + "|" + String.valueOf(riga2) + "|" + descr2;
			key2 = key1;
			key3 = key1;
	 		ht1.put(key1,descr2);
	 		ht2.put(key2,String.valueOf(interroga));
	 		progre++;
	 		comodo = String.valueOf(progre) + "|" + String.valueOf(var1);
	 		ht3.put(key3,comodo);
	 		var1=progre;
			key1 = String.valueOf(cod1) + "|" + String.valueOf(riga1) + "|" + descr1;
			key2 = key1;
			key3 = key1;
	 		ht1.put(key1,descr1);
	 		ht2.put(key2,String.valueOf(interroga));
	 		progre++;
	 		comodo = String.valueOf(progre) + "|" + String.valueOf(var1);
	 		ht3.put(key3,comodo);
	 		var1=progre;
			key1 = String.valueOf(cod0) + "|" + String.valueOf(riga0) + "|" + descr0;
			key2 = key1;
			key3 = key1;
	 		ht1.put(key1,descr0);
	 		ht2.put(key2,String.valueOf(interroga));
	 		progre++;
	 		comodo = String.valueOf(progre) + "|" + String.valueOf(var1);
	 		ht3.put(key3,comodo);
	 		}
	 	catch (NullPointerException e){
	 		System.err.println("Eccezione HT4i: " + e.getMessage()); 	
     	 	}	
 		}
	}
ho messo solo un pezzo, gli altri metodi sono simili.