La cosa più efficace e ciò che è meglio di solito non sono la stessa cosa.
La prima domanda che dovresti fare in questa situazione è come hai finito per attraversare la struttura dei dati al contrario. Perché non può essere costruito nell'ordine corretto all'inizio?
È molto più semplice correggere il codice cattivo piuttosto che lavorare con strutture di dati scadenti. Non accettare questa situazione se non è necessario.
Se necessario, la prossima domanda è: vuoi davvero accoppiare il codice di inversione con il codice di stampa? Il secondo approccio ha molto più senso quando li disaccoppia.
List<Integer> listInteger = Arrays.asList(array);
Collections.reverse(listInteger);
media.display(listInteger);
display
può inviarlo a system out, o caricarlo in una GUI, o stamparlo su carta, o trasformarlo in una parte di una pagina web, o ...
Il primo approccio funziona quando vuoi solo un modo veloce e sporco codificato per ottenerlo sullo schermo.
Per quanto è più "efficiente", il primo riutilizza la memoria esistente mentre il secondo ne fa una copia. Se la matrice è abbastanza grande da farla valere, allora va bene. Ma perché diavolo l'hai creato all'indietro al primo posto?
Il primo rende felice il computer e mi lamento per la perdita di flessibilità. La scelta di chi rendere felice dipende da te.
Ricorda che la flessibilità prematura (vedi BDUF vs YAGNI) è quasi pessima quanto l'ottimizzazione prematura. Quindi qualunque cosa tu faccia, ti rendi conto che hai già passato troppo tempo a pensarci.
Inoltre, risulta che esiste un modo migliore per implementare la seconda opzione. È dettagliato qui .