Java, modificare dimensione array quando necessario

di il
4 risposte

Java, modificare dimensione array quando necessario

Salve a tutti,

devo realizzare questo metodo:

public static Veicolo[] veicoliLusso(Veicolo[] veicoli) che, data una lista veicoli di oggetti di classe Veicolo, restituisce l’insieme degli elementi v di veicoli che hanno più di 5 posti o la cui tassa di circolazione sia superiore a 500.

Lasciando perdere il contesto generale in cui andrebbe implementato il metodo, ho bisogno di un aiuto più tecnico.

Il metodo l'ho realizzato così:
     
public static Veicolo[] veicoliLusso(Veicolo[] veicoli)
     {
         int dim = 0, j = 0;
         Veicolo[] ris;
         for(int i = 0; i < veicoli.length; i++)
         {
             if(veicoli[i].numeroPosti() > 5 || veicoli[i].tassaCircolazione() > 500)
                dim++;
         }
         ris = new Veicolo[dim];
         for(int i = 0; i < veicoli.length; i++)
         {
             if(veicoli[i].numeroPosti() > 5 || veicoli[i].tassaCircolazione() > 500)
             {
                ris[j] = veicoli[i];
                j++;
             }
         }
         return ris;
     }
Come potete vedere eseguo due cicli for sull'array veicoli. Il primo, per conoscere la dimensione che dovrà avere l'array ris che il metodo dovrà ritornare ed il secondo per caricarlo.

Volevo chiedervi se potesse essere possibile aumentare la dimensione di ris sul momento, senza eseguire il primo ciclo for per conoscere la dimensione. Una sorta di realloc in C (?).

Grazie

4 Risposte

  • Re: Java, modificare dimensione array quando necessario

    davide.fruci ha scritto:


    Volevo chiedervi se potesse essere possibile aumentare la dimensione di ris sul momento, senza eseguire il primo ciclo for per conoscere la dimensione. Una sorta di realloc in C (?).
    No, gli array in Java non sono ridimensionabili. Bisogna istanziare un nuovo array di dimensione differente (più piccolo o più grande a seconda dei casi) e ricopiare i dati dal vecchio array.
  • Re: Java, modificare dimensione array quando necessario

    Che peccato, non si può proprio fare niente?

    Comunque, come ho fatto io va bene? O fa acqua da qualche parte?
  • Re: Java, modificare dimensione array quando necessario

    davide.fruci ha scritto:


    Che peccato, non si può proprio fare niente?
    Una cosa sì: usare internamente al metodo un ArrayList<Veicolo>. Fai un solo ciclo, se condizione true aggiungi nel ArrayList. Alla fine ottieni un Veicolo[] dal ArrayList (vedi metodi toArray di List ma occhio a quale dei due toArray !! c'è una questione di tipo dell'array istanziato molto importante).

    davide.fruci ha scritto:


    Comunque, come ho fatto io va bene? O fa acqua da qualche parte?
    A occhio mi pare corretto.
  • Re: Java, modificare dimensione array quando necessario

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte