Hashtable. Come funziona?

Ora, sto cercando di capire come costruire il Hashtable.

Più interessanti – come gli oggetti vengono aggiunti al Hashtable?

Ho letto in un libro:

al primo passo:
Calcolato hashCode() oggetto.

A quel punto, per determinare la posizione dell’oggetto in Hashtable: obj.hashCode() % Hashtable.length.

Per esempio, aggiungere ulteriori elementi al Hashtable:

Hashtable<String, String> hm=new Hashtable<String, String>(100);

        hm.put("Lee","Lee");
        hm.put("lee","lee");
        hm.put("eel","eel");

Definire un secchio in cui è collocato l’oggetto:

    System.out.println("Lee".hashCode() % 100);
    System.out.println("lee".hashCode() % 100);
    System.out.println("eel".hashCode() % 100);

Se ho capito l’algoritmo, gli oggetti devono essere inseriti nella tabella come segue:

eel /*because,"eel".hashCode() % 100=0*/, 
lee /*because, "lee".hashCode() % 100=20*/, 
Lee /*because, "Lee".hashCode() % 100=68*/

ma quello che noi vediamo come un risultato?

System.out.println(hm);

{Lee=Lee, lee=lee, eel=eel} 

Favore, mi dica dove ho sbagliato?

OriginaleL’autore user471011 | 2010-10-20

4 Replies
  1. 7

    Iterazione ordine di Hashtable (così come HashMap) elementi non è garantita (implementazione dipendente), quindi IMHO non c’è molto senso cercare di costruire una teoria su di esso. Si può anche cambiare tra le diverse versioni di Java (lo ha fatto modificare da Java5 di Java6).

    Btw Hashtable è obsoleto, si consiglia di utilizzare (e analizzare) HashMap invece.

    Tua descrizione suoni OK per me di base la mappa hash attuazione. Tuttavia, l’effettiva attuazione di HashMap è un po ‘ più sofisticata di quella che, almeno dal Java4. E. g. la dimensione della tabella di hash è sempre una potenza di due (che sarebbe del tutto una cattiva decisione per una hashtable come si descrivere), e i valori hash ottenuto dalla chiave gli oggetti sono ritriti internamente per ottenere una distribuzione più uniforme sulla reale dimensione della tabella. Per ulteriori informazioni su questo, vedere i seguenti problemi di Java Specialista Newsletter:

    +1 “Si può anche cambiare tra le diverse versioni di Java.” In Perl, cambia addirittura tra programma invokations per prevenire attacchi di tipo denial-of-service attacchi utilizzando hash collisioni.
    un extra funzione di hash , per evitare una collisione in chiave diversa di cadere nella stessa secchio.

    OriginaleL’autore Péter Török

  2. 2

    Una Tabella hash è un mapping da chiavi di valori. È questa mappatura che viene visualizzata quando si stampa una Tabella hash.

    La storia .hashCode e .equals è una descrizione di massima di come si riesce a tenere traccia di coppie chiave/valore internamente.

    Alcune osservazioni sulla domanda però:

    • Il capacity che è impostato su 100 nel tuo esempio, non rappresentano il numero di bucket per memorizzare gli oggetti. Esso rappresenta il numero di oggetti Hashtable ha la capacità, con un fattore di carico .75.

    • Il numero di segmenti possono variare durante l’esecuzione. Se si mantiene l’aggiunta di oggetti per un lungo periodo di tempo, il fattore di carico è aumentato, e i secchi possono essere riassegnati e oggetti “rimaneggiato”.

    Dal docs:

    Il fattore di carico è una misura di quanto completa la tabella hash è permesso di ottenere, prima della sua capacità viene automaticamente aumentata. La capacità iniziale e fattore di carico parametri sono semplicemente suggerimenti per l’attuazione. I dettagli esatti di quando e se il rimaneggiamento, viene richiamato il metodo sono dipendente dall’implementazione.

    OriginaleL’autore aioobe

  3. 1

    Il concetto di hashtable è quello di aggiungere gli oggetti nella tabella secondo alcune funzione di hash (prende un oggetto e restituisce un indice).

    La tua descrizione di una tabella hash è solo uno dei tanti (tanti…), e sarei sorpreso se fosse implementato in Java stesso modo in cui si legge.

    OriginaleL’autore Neowizard

  4. 0

    Come accennato in precedenza Hashtable è l’implementazione dipendente e mi sento di raccomandare di leggere su di Hashtable in generale, ad avere l’idea di come funzionano e poi dopo la comprensione di come funziona la lettura su specifica implementazione in Java o in altre lingue.

    Wikipedia ha davvero un ottimo articolo su questo argomento, quindi suggerisco di leggere prima questo.

    OriginaleL’autore Vitalij

Lascia un commento