Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] HashMap

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [JAVA] HashMap

    Ciao ragazzi ho un problema con una classe....io per ora ho una superclasse DataStruct con un tot di figli che implementano varie strutture dati.
    In questo caso sto lavorando sulle hashmap....il problema è nell inserimento....io voglio inserire dei valori a caso con chiavi rappresentati da numeri Integer crescenti...però quando vado ad aggiungere put(Integer x, Value y) esso mi ritorna NULL.
    Non riesco a capire dove sbaglio....potete darmi una mano?? ho sbagliato a dichiarare qualcosa??perchè il compilatore non si arrabbia, anzi termina correttamente ma ovviamente i valori non vengo inseriti correttamente
    codice:
    import java.util.HashMap;
    
    public class StrHashMap<V,E> extends DataStruct<E> {
    	
    	//ARGOMENTI//
    	private HashMap<Integer,E>  struct;
    	
    	//COSTRUTTORI//
    	public StrHashMap(){
    		struct = new HashMap<Integer,E>();
    	}
    	
    	//METODI//
    	public boolean search(E e){
    	    if(struct.containsValue(e)){
    	    	double start = System.nanoTime();
    	    	struct.containsValue(e);					 //SERCH//
    	    	double end = System.nanoTime();
    	    	tempSearch = tempSearch + (end - start);
    	    	System.out.println(tempSearch);
    	    	return true;
    	    }else{
    	    	tempSearch = tempSearch + 0;
    	    	return false;
    	    }
    	}
    	     
    	public boolean add(DataExtractor<E> e){
    		Integer key = 0;
    		for(E i : e.getData()){
    			key = key + 1;
    		    double start = System.nanoTime();  
    		    System.out.println(struct.put(key,i)); 							//ADD//
    		    double end = System.nanoTime();		
    		    tempAdd = tempAdd + (end - start);
    			}
    		keyMem = key;
    		System.out.println("CHIAVI MEMORIZZATE"+keyMem);
    	    return true; 
    	} 
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    ho sbagliato non guardate la search...è l'add che mi da problemi
    codice:
    	public boolean add(DataExtractor<E> e){
    		Integer key = 0;
    		for(E i : e.getData()){
    			key = key + 1;
    		    double start = System.nanoTime();  
    		    System.out.println(struct.put(key,i)); 							
    		    double end = System.nanoTime();		
    		    tempAdd = tempAdd + (end - start);
    			}
    		keyMem = key;
    		System.out.println("CHIAVI MEMORIZZATE"+keyMem);
    	    return true; 
    	}

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Sto guardando che il problema è di fondo....anche facendo cosi:
    codice:
    import java.util.HashMap;
    
    public class prova {
    
    	public static void main(String[] args) {
    		HashMap<Integer,Integer> alfa = new HashMap<Integer,Integer>();
    		
    		Integer a = 1;
    		Integer b = 2;
    		Integer c = 4 ;
    		Integer d = 8;
    		System.out.println(alfa.put(a,b));
    		System.out.println(alfa.put(c,d));		
    
    	}
    
    }
    il risultato è:
    codice:
    null
    null
    dove sbaglio???

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Hai letto la documentazione di HashMap (in particolare del metodo put() )?

    Returns the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key.)
    Se la mappa è vuota (o, comunque, la chiave non è ancora presente), ritorna null... che altro dovrebbe ritornare un metodo che si occupa di creare una mappatura?
    Ritorna un valore diverso da null nel caso tu stia sovrascrivendo una mappatura già esistente... in questo caso ritorna il valore che è attualmente nella mappa e che tu stai per rimpiazzare.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    si ok...pero poi quando reinserisco la chiave mi ritorna null (null if there was no mapping for key)...non riesco a capire il perchè...no mapping vuol dire che per quella chiave non c'è mappato nessun valore giusto?
    Se fosse giusto allora perchè inserendo degli Integer consecutivi (1 , 2 ,3 ,4...) quando faccio la ricerca per chiave mi restituisce null??

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ma veramente nel codice che hai postato (il secondo, dove parli del problema di fondo), tu stai solo facendo degli inserimenti... tutti su una mappa vuota appena creata e tutti con chiavi "univoche".

    Prova questo semplice esempio:

    codice:
    import java.util.*;
    
    public class Mappature {
       public static void main(String[] args) {
          HashMap<Integer,String> mappa = new HashMap<Integer,String>();
    
          // Stamperà null perchè la mappa è vuota (non esiste, quindi,
          // nessuna mappatura per la chiave 1)
          System.out.println( mappa.put(1, "Pippo") );
    
          // Stamperà null perchè non esiste nessuna mappatura per la chiave 2
          System.out.println( mappa.put(2, "Pluto") );
    
          // Ora stamperà "Pippo" perchè sto sovrascrivendo la mappatura per
          // la chiave 1, che in questo momento contiene, appunto, "Pippo"
          System.out.println( mappa.put(1, "Paperino") );
    
          // Ora la mappatura per la chiave 1 contiene "Paperino" e non più "Pippo"
          System.out.println( mappa.get(1) );
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Forse dovresti rivedere la differenza tra put() e get()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.