Convertire una coda in un array

di il
2 risposte

Convertire una coda in un array

Buonasera,
dovrei convertire una coda fatta da una lista linkata di nodi in un semplice array.
Sto utilizzando i generics e nell'array che restituisco vorrei fare una copia dei miei elementi, senza passare i riferimenti.
Il mio codice per adesso è questo:

	 public T[] toArray(){
		 Nodo<T> temp = this.head;
		 T[] array = (T[])new Object[this.size]; //<---??
		 int i=0;
		 while(temp!=null) {
			 array[i]=temp.getInfo();
			 i++;
		 }
		 return array;
	 }
E' corretto anche il cast in riga 3?
Grazie in anticipo!

2 Risposte

  • Re: Convertire una coda in un array

    mark22 ha scritto:


    T[] array = (T[])new Object[this.size]; //<---??
    E' corretto anche il cast in riga 3?
    Sì, il cast è appropriato in questa circostanza. Causa un warning di unchecked cast, perché il compilatore non può "provare" che sia corretto. Ma il cast non compromette nulla a livello pratico. Un array Object[] può contenere oggetti di qualunque tipo, quindi qualunque sia poi la parametrizzazione concreta usata per istanziare la tua classe, gli oggetti che riceve possono certamente stare nel Object[].

    Il warning lo puoi "sopprimere" con la annotazione @SuppressWarnings("unchecked")

    Il toArray che hai fatto lo stavi pensando per l'uso da parte del shuffle e va bene. Ma il toArray l'hai fatto public, quindi potrebbe invocarlo chiunque dall'esterno. Se SERVE davvero un toArray anche all'esterno, allora sarebbe utile un ALTRO toArray, più appropriato, che riceva già un array, in modo che il metodo possa usarlo come destinazione o per "copiare" il tipo creandone uno nuovo. Questa è appunto la differenza tra

    public Object[] toArray()
    e
    public <T> T[] toArray(T[] a)

    di tutte le Collection del framework
  • Re: Convertire una coda in un array

    Grazie mille! Sei sempre molto preciso e mi rispondi sempre in tempo brevi.
    Grazie ancora, complimenti
Devi accedere o registrarti per scrivere nel forum
2 risposte