Oppure

Loading
06/02/09 14:35
ilciolla
Ciao ragazzi il post precedente era un po troppo vago percio ho deciso di farne uno nuovoù:


Ho bisogno di sapere come posso creare una nuova struttura dati in java.

Nel senso che devo fare un progetto nel quale mi viene richiesto di non utilizzare le strutture dati delle API di java .

Pero mi viene richiesto di creare un implementazione di un oggetto Insieme come array di interi con dimensioni massime limitate solo dalla memoria disponibile.

Come posso fare ?

un idea era quella di creare un oggetto simile ai Vector delle API no?
ma come si fa?
aaa
06/02/09 17:49
netarrow
ti ho risposto nell'altro:

pierotofy.it/pages/extras/forum/…=

ora l'ho chiuso e continuiamo qui.

Per farlo crei un array di int di dimensione x, e mano a mano che uno aggiunge gli x quando arrivi alla fine della sua dimensione riallochi con new il vettore e gli dai una dimensione grande il doppio di prima. Vector se non sbaglio funziona così.
aaa
07/02/09 13:12
ilciolla
Ok ad esempio io ho creato la mia classe:


class Vettore {
    private Object[] elementi;
    private int dimensione;

    public Vettore(int capacitaIniziale) {
        elementi = new Object[capacitaIniziale];
    }

    public void add(Object elem) {
        assicuraCapacita(dimensione+1);  // ho bisogno di 1 elemento in più
        elementi[dimensione++] = elem;
    }



Pero ad esempio se io creo una funzione resize() che nel caso ci siano aggiunte da fare mi rialloca lo spazio raddoppiando il mio array ....Se per caso finisce la memoria viene lanciata un eccezzione automaticamente oppure devvo mettere un try catch da qualche parte?
aaa
07/02/09 17:51
netarrow
tu non dovresti mettere try catch, quando fai una classe di questo tipo devi mettere i throws nella dichiarazione e far gestire i potenziali errori all'utente della classe.

Per il discorso di gestire l'esaurimento delle memoria del pc non sono mai giunto a tali situazioni, potresti guardare la classe Vector originale cosa fa o vedere su google qualcosa, ho trovato questo al caso: onjava.com/pub/a/onjava/2001/08/22/…

Quello che dovrebbe fare il tuo codice è contare gli elementi inseriti, e vedere che se è stato inserito l'ultimo elemento possibile la memoria disponibile va raddoppiata, per fare questo ricordati che devi creare un secondo vettore in cui salvare l'attuale array, riallocare con new l'array principale e poi, partendo dal vecchio vettore, ritravasare i vecchi dati nel nuovo vettore più grande. Per fare questo ti sarà utile System.arraycopy
aaa