PDA

View Full Version : [JAVA] problemone:java e tabelle hash


scarface7
13-10-2007, 18:56
salve a tutti,
mi servirebbe il vostro aiuto per risolvere questa esercitazione sul linguaggio java:

Realizzare una classe Table per la gestione di una tabella (di dimensiona prefissata) ordinata di coppie <Key,Value>, che esporta i seguenti metodi :
Table():costruttore che costruisce una tabella di dimensione standard,
Table(int size): costruttore che costruisce una lista di dimensione size,

....e altre funz varie


Note realizzative:
La tabella è realizzata mediante una tecnica di hashing ad indirizzamento aperto in un vettore di dimensiona prefissata, allocato staticamente. Ipotizzata la chiave Key di tipo intero, si adoperi la funzione di hash a scansione lineare:
h(Key,i) = ((key%size)+i)%size
dove i è il tentativo effettuato. Inizialmente si invoca la funzione h(key,0); se la posizione è libera si inserisce l’elemento, altrimenti, si cerca la nuova posizione con h(key,1); ancora una volta se è libera si inserisce l’elemento altrimenti si invoca h(key,2), e così via. Ovviamente la tabella è piena se si giunge al tentativo size-1;


ora quello che vi chiedo:

ke tipo di vettore statico dovrei usare...mica dovrei usare una matrice?

vi ringrazio anticipatamente per le vostre risposte

PGI-Bis
13-10-2007, 19:37
Credo che il testo si riferisca ad un array di dimensione nota pari a "size" (dove size è pari al valore passato in costruzione o alla dimensione standard in caso di costruzione senza argomenti).

morskott
14-10-2007, 11:32
class Couple{
Integer key;
Object value;
}
public class MyHashTable{
private Couple[] table;
private int size;

private static final int DEF_SIZE=100;

public MyHashTable(int size){
this.size=size;
this.table=new Couple[this.size];
}

public MyHashTable(){
this(DEF_SIZE);
}

public boolean put(Integer key,Object value){
for (int i=0;i<this.table.length;i++){
int pos=calcolaHash(key,this.size,i);
if (this.table[pos]==null){
Couple coup=new Couple();
coup.key=key;
coup.value=value;
this.table[pos]=coup;
return true;
}
}
return false;
}

private static int calcolaHash(Integer key,int size,int i){
return ((key.intValue()%size)+i)%size;
}
}

Questo dovrebbe funzionare