Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    11

    [java] Creare un array in base alla memoria disponibile..

    Mi scuso con tutti per il post di prima non avevo bene letto il regolamento .....

    Ora spero di fare come da regolamento una domanda ben specifica al mio problema:

    Per un progetto devo implementare un Insieme come array di interi con dimensioni massime limitate solo dalla memoria disponibile.

    In pratica cosa devo fare di preciso?


    devo vedere un array come un insieme giusto?

    quindi nel costruttore quando dichiaro il mio array come faccio a farlo dinamico cioe in base alla memoria disponibile?

    anche perche poi dovro crearne altre per confronti e unioni ecc..

    Sapete mica come schiarirmi le idee perche non riesco a capire in che modo fare.

  2. #2
    I metodi della classe Runtime forse ti possono aiutare: http://java.sun.com/j2se/1.5.0/docs/...g/Runtime.html
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    11

    forse....

    pero nel progetto mi viene chiesto di non utilizzare strutture delle API di java .....dici che usando la classe runtime andrei contro questo parametro?


    Perche ad esempio potri utilizzarla per sapere quanta memoria ho disponibile .....

    Anche se pero come faccio a creare un array dinamico non usando Vector?

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Certo che in quanto a esposizione... dovresti essere tu ad avere le idee chiare su quello che devi fare...

    devo implementare un Insieme come array di interi con dimensioni massime limitate solo dalla memoria disponibile
    Cosa significa? una cella del vettore per ogni MB di memoria libera? Comunque qui si intuisce che parli di un array con una dimensione variabile e legata alla ram disponibile.

    quindi nel costruttore quando dichiaro il mio array come faccio a farlo dinamico cioe in base alla memoria disponibile?
    Qui invece ti perdi completamente: non basta il costruttore.

    Devi creare una tua struttura dati che "simuli" un vettore dinamico senza utilizzare le strutture dati fornite dalle API. Ci sono diversi modi per farlo, io te ne indico due:

    - una catena di nodi (linked list)
    - attraverso un vettore statico che viene sostituito con un vettore statico più grande quando a furia di inserimenti diventa pieni.

    Diciamo che vuoi realizzare la seconda struttura dati... Ti occorre un oggetto che abbia:
    - un contatore del numero di elementi inseriti
    - un vettore statico, sempre grande abbastanza da contenere tutti gli elementi inseriti

    Nel costruttore puoi indicare la dimensione iniziale del vettore. Ma per rendere dinamica questa cosa ti occorrono altri metodi:
    - get (i), che restituisce l'elemento alla posizione i
    - set (i, ?), che inserisce ? nella posizione i del vettore
    - size(), che restituisce il numero di elementi inseriti
    - resize(), un metodo che sostituisce il vettore statico attuale con un nuovo vettore statico più grande in cui viene copiato tutto il contenuto del vecchio vettore.

    la cosa importante è che il metodo set deve controllare che il numero di elementi già inseriti (dimensione del vettore dinamico) non sia superiore alla capacità del vettore statico. Se non è così va invocato il metodo resize.

    In genere è un buon criterio quello di raddoppiare ad ogni resize quello la capacità del vettore dinamico, cioè di creare un nuovo vettore statico di capacità doppia rispetto alla capacità del vecchio vettore.

    In quanto all'uso della classe RunTime, mi pare di avertela già suggerita e credo sia anche l'unico modo che hai per conoscere la memoria libera.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] Creare un array in base alla memoria disponibile..

    Originariamente inviato da bocco
    quindi nel costruttore quando dichiaro il mio array come faccio a farlo dinamico cioe in base alla memoria disponibile?
    Credo che tu non debba farlo in base alla memoria disponibile, cioè dire "se ho X mega di ram disponibile allora alloco un array lungo Y". Avrebbe poco senso.

    Penso invece che tu debba implementare una struttura dati che è in grado di "espandersi" man mano che serve. Che è poi quello che fanno le collezioni già presenti nel framework di Java, es. ArrayList. ArrayList è una lista basata internamente su un banalissimo array Object[] ma con la caratteristica di potersi espandere man mano che serve. Quando fai un add(), se la capacità fisica dell'array non è più sufficiente, ArrayList istanzia un nuovo array più grande, copia gli elementi dal vecchio array al nuovo e quindi aggiunge il nuovo valore.
    Altre strutture dati, es. LinkedList, sono gestite in modo diverso ma ad ogni modo sono in grado di espandersi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Azz.. avevo dimenticato e confuso il metodo add...

    diciamo che se il vettore dinamico ha n elementi
    - add aggiunge un nuovo elemento in posizione n (gli altri elementi sono n: da 0 a n-1)
    - set (i,?) modifica il contenuto di una cella esistente (se i<n) oppure allarga il vettore fino a contenere i+1 elementi... non è detto che debba essere realizzato e come...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    11

    Piu o meno credo che ci siamo ma......

    Allora credo che l idea di una struttura tipo array list che si espande in base alla memoria disponibile sia la piu giusta.

    Anche perche il progetto mi da gia un interfaccia prestabilita che poi io andro ad implementare ed e cosi composta:

    io ho un interfaccia Insieme che estende Iterable e Cloneable con questi vari metodi :

    clear () svuota l insieme
    isEmpty() ver. se e vuoto
    size() restituisce numero oggetti presenti
    max() mi da il max intero
    nextTrue(int x) x intero da cui partire returna l intero presente nell insieme successivo
    put() inserisce un int nell insieme
    contains() controlla se un int e presente
    remove()
    toString() returna una string con gli elementi dell'insieme in ordine crescente
    toArray() conversione in un array
    clone() ritorna un clone dell insieme
    iterator() restituisce un iteratore per scandire gli elementi di un isnieme
    unione()
    intersezione()
    differenza()

    Dopo quello che mi avete suggerito secondo voi se utilizzo un ArrayList che cambia la dimensione in maniera dinamica a seconda delle richieste faccio una cosa giusta'?
    ma sopratutto rispetto le richieste del progetto di non utilizzare strutture delle API di java (cosa intende con questa restrizione che non ho capito bene?)?

    Inoltre per me questo ArrayList diventera un oggetto di tipo Insieme che poii andra anche convertito in normale Array ecccetera secondo voi questa soluzione e accettabile? o devo pensare anche ad altri tipi di strutture?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Piu o meno credo che ci siamo ma......

    Originariamente inviato da bocco
    ma sopratutto rispetto le richieste del progetto di non utilizzare strutture delle API di java (cosa intende con questa restrizione che non ho capito bene?)?
    Che spesso, per ragioni "didattiche" e di esercizio, un professore/docente impone di non usare collezioni già fatte ma di implementare per intero una collezione con del proprio codice.

    Se hai capito, a livello concettuale, come funziona una collezione tipo ArrayList o LinkedList, non dovresti avere grossi problemi a fare una "tua" collezione, che chiaramente non ci si aspetta che sia performante/flessibile/sofisticata ma che almeno faccia capire ... che hai capito!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051

    Re: Piu o meno credo che ci siamo ma......

    Originariamente inviato da bocco
    Allora credo che l idea di una struttura tipo array list che si espande in base alla memoria disponibile sia la piu giusta.
    Ma è anche la più criptica... il tuo oggetto deve analizzare periodicamente la memoria libera?

    ma sopratutto rispetto le richieste del progetto di non utilizzare strutture delle API di java (cosa intende con questa restrizione che non ho capito bene?)?
    Sai cos'è una struttura dati? Non puoi usare quelle già pronte del package util. Anzi, questo package lo devi ignorare completamente. Quindi per te java non ha vettori dinamici o liste.

    Inoltre per me questo ArrayList diventera un oggetto di tipo Insieme che poii andra anche convertito in normale Array ecccetera secondo voi questa soluzione e accettabile? o devo pensare anche ad altri tipi di strutture?
    La struttura dati che devi implementare devi sceglierla in base ai metodi che devi fornire.
    Se hai voglia di andare sul sicuro crea un vettore dinamico.
    Se hai voglia di divertirti, prova la strada della linked list.

    Se hai del materiale da studiare riguardo a queste strutture dati è meglio che lo spolveri.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    11

    ok...

    quindi praticamente mi devo creare una struttura del tipo vector delle API di java da solo senza utilizzare naturalmente quella gia esistente.

    Percio mi creo questo nuovo tipo di collection che dovrà crescere se richiesto solo nel caso ci sia ancora memoria disponibile .

    Avete per caso esempi pagine o link dove posso trovare un infarinatura per farlo?

    Cioè io sono in grado di utilizzare Vector ma non saprei proprio come cotruire un oggetto di questo tipo dal nulla......

    Dite che se guardo quella originale nelle APi posso trovare spunto?

    Scusate se vi faccio tutte queste domande ma ho questo problema perche per l implementazione dell interfaccia non ho problemi ma per la creazione della mia struttura senza Api sono proprio incasinato.

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.