Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: capacity array list

  1. #1
    Utente di HTML.it L'avatar di kick
    Registrato dal
    Sep 2010
    Messaggi
    15

    capacity array list

    ciao!
    ho un problema con gli arraylist!
    vorrei sapere la "differenza" fra Capicity e Size, ovvero, quando incremento la capacità con il metodo "ensureCapacity" vado anche ad aumentare la "size" o c'è una differenza fra le 2..

    ve lo chiedo perchè nel mio programma incremento la capacità ma vedo che la grandezza mi rimane sempre 0...e penso sia il motivo per cui mi tornano sempre delle eccezioni

    IndexOutOfBoundsException

    grazie per l'aiuto!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: capacity array list

    Originariamente inviato da kick
    ciao!
    ho un problema con gli arraylist!
    vorrei sapere la "differenza" fra Capicity e Size, ovvero, quando incremento la capacità con il metodo "ensureCapacity" vado anche ad aumentare la "size" o c'è una differenza fra le 2..
    "size" è il numero di elementi effettivamente inseriti nell'arraylist mentre "capacity" è la dimensione dell'array interno. Posta il codice che ti da errore così vediamo cosa c'è di sbagliato
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di kick
    Registrato dal
    Sep 2010
    Messaggi
    15
    Il metodo che mi da errore è questo..me lo da sul metodo .add...
    La classe in cui è contenuto estende un ArrayList.
    Quello che dovrebbe fare è inserire la String dati nell'Array..ogni String dati ha un seriale, che va da 1 in su..e quello che voglio è inserire i pacchetti ordinati in base al seriale, anche se non so in che ordine mi arriveranno..quando poi ho un tot di posizioni dell'Array diverse da null e in posizioni adiacenti..vado avanti col resto del codice..
    spero di non averti incasinato..!!grazie!!

    codice:
      public void analisi(String dati,int seriale,int posizione){
    
    
          if (seriale>=this.size()){
    
              this.ensureCapacity(seriale);
    
          }
    
          this.add(posizione, datiSTR);
    
          ++TotalPack;
          
          if (seriale == CompletedPackECG + 1){
    
              while(this.get(posizione)!=null){
                 ++CompletedPack;
    
                 String dati = (String) this.get(posizione);
                 
                 String[] datisplit = dati.split("//");
                 
                 DoubleDati = new double [datisplit.length];
                 for (int i =0; i<datisplit.length;i++){
                     DoubleDati[i] = Double.parseDouble(datisplit[i]);
                 }
    //altro codice....
    //...
                 
              }
          }
    
    
        }

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da kick
    Il metodo che mi da errore è questo..me lo da sul metodo .add...
    La classe in cui è contenuto estende un ArrayList.
    Ti serve veramente estendere ArrayList? In genere è una cosa superflua..

    Originariamente inviato da kick
    codice:
      public void analisi(String dati,int seriale,int posizione){
    
    
          if (seriale>=this.size()){
    
              this.ensureCapacity(seriale);
    
          }
    
          this.add(posizione, datiSTR);
    Nel momento in cui fai add esiste l'elemento di indice posizione?

    Originariamente inviato da kick
    Quello che dovrebbe fare è inserire la String dati nell'Array..ogni String dati ha un seriale, che va da 1 in su..e quello che voglio è inserire i pacchetti ordinati in base al seriale, anche se non so in che ordine mi arriveranno..
    Per fare questo non ti è più comodo un TreeSet? Ordina in automatico gli oggetti man mano che vengono aggiunti

    edit: potresti anche seguire le convenzioni di java per quando riguarda i nomi delle variabili: iniziale minuscola (ad esempio: totalPack). L'iniziale maiuscola è riservata a classi e interfacce
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di kick
    Registrato dal
    Sep 2010
    Messaggi
    15
    sorry!!..non sono un'informatica pura e la mia esperienza col java è limitata..come avrai capito!!

    I TreeSet potrebbero essere un'idea..però non li ho mai usati..mi stavo un po' guardando la doc..!Ho visto che nel costruttore puoi assegnargli un Comparator..ma non ho ben capito come funziona!

    Riguardo alla tua domanda sul codice..io ho sempre che

    posizione = seriale - 1

    quindi l'if sopra il metodo ".add" dovrebbe verificare quello che mi hai chiesto..o sbaglio..?

    grazie!

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Riguardo alla tua domanda sul codice..io ho sempre che

    posizione = seriale - 1
    Sicurissima? Comunque, perchè non provi a postare tutto lo stacktrace dell'eccezione che ti si presenta?

  7. #7
    Utente di HTML.it L'avatar di kick
    Registrato dal
    Sep 2010
    Messaggi
    15
    mmmh..sicurissima in effetti no..però non saprei come altro fare..

    ecco l'eccezione...

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at package1.Storage.analisi(Storage.java:45)
    at package1.cl.read(cl.java:736)
    at package1.cl.work(cl.java:425)
    at package1.Main.main(Main.java:106)

  8. #8
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Credo che il problema sia qua:

    codice:
    while(this.get(posizione)!=null){
    Non lo riporti nel codice, ma immagino che ad ogni iterazione incrementi il valore di "posizione": se l'ArrayList è "pieno", quando questo valore diventa uguale alla sua capacity va fuori range e non ti ritorna null, ma ti genera una IndexOutOfBoundsException

  9. #9
    Utente di HTML.it L'avatar di kick
    Registrato dal
    Sep 2010
    Messaggi
    15
    esatto!..è vero!....possibili soluzioni.. ..?
    ho provato anche a costruire l'arraylist con una capacità elevata..per evitare il problema (so che è cmq poco ortodosso..!!)..ma il risultato non cambia!!

    questo è il costruttore:
    codice:
        public Storage(int initialCapacity, int CompletedPack, int TotalPack) {
            this.CompletedPack = CompletedPack;
            this.TotalPack = TotalPack;
        }
    e questa la creazione:
    codice:
    mystorage = new Storage(100,0,0);

  10. #10
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Allora, ho rivisto il tuo codice con calma e mi sono accorto di una cosa. Quando invochi una ensureCapacity() ti stai assicurando che l'array sottostante l'ArrayList sia dimensionato in modo da poter ospitare almeno quel numero di elementi. Ma ciò ha utilità solo in termini di performance: serve a evitare, se necessario, che l'ArrayList continui a dover incrementare la propria dimensione "allargando" l'array sottostante. In ogni caso il tuo vincolo rimane sempre la size, non la capacity (di cui, se hai capito il mio discorso, sai che potresti benissimo disinteressarti).

    Se sei sicura che i nuovi elementi arrivano tutti con il seriale già in sequenza corretta, puoi tranquillamente utilizzare ArrayList come stai già facendo (solo con questi accorgimenti).
    Se invece non hai questo tipo di garanzia, le possibilità sono 2:
    - istanzi un array di dimensione almeno sufficiente a contenere tutti gli elementi che andrai a memorizzare (ma devi sapere a priori quanti sono);
    - utilizzi un'altra struttura dati più opportuna, come ad esempio una Hashtable (EDIT: o una Hashmap)

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.