Quote Originariamente inviata da Gas75 Visualizza il messaggio
è possibile duplicare un ArrayList e modificarne, per esempio con un fattore moltiplicativo, tutti i suoi componenti, trattandosi di numeri?
Ho trovato qualcosa relativamente alle shallow copy ma non le ho mai incontrate prima e non so se costituiscono la strada giusta.
"shallow" copy, rispetto al "deep" copy, vuol solo dire in generale che data una struttura dati che viene "clonata", NON tutto viene completamente duplicato e resto distinto. Cioè certe cose restano ancora comuni e condivise tra la struttura originale e quella "clonata".

Le collezioni Java sono clonabili (hanno il metodo clone pubblico) ma fanno solo una shallow copy. Il clone() di ArrayList restituisce un NUOVO oggetto ArrayList ma i reference contenuti sono esattamente gli stessi (proprio in termini di == ) contenuti nel ArrayList originale.
Questo vuol dire che nel nuovo ArrayList puoi aggiungere, rimuovere, spostare i reference come vuoi e questo non cambia nulla nel ArrayList originale, perché la struttura dati in sé è distinta. Ma non gli oggetti! Se un oggetto contenuto fosse "mutabile", la modifica all'oggetto la "vedi" attraverso entrambi gli ArrayList, perché hanno lo stesso reference al medesimo oggetto mutato.

Quote Originariamente inviata da Gas75 Visualizza il messaggio
A me, a livello di concetto, interessa qualcosa del genere:
codice:
int n;
ArrayList2 = new ArrayList();
for (int i = 0; i < ArrayList1.size(); i++) {
   ArrayList2[i] = n * ArrayList1[i]
}
A parte il fatto che con ArrayList, non puoi certo indirizzare con [i], perché non è un array.

Ma il succo/concetto comunque è proprio quello: un for e poi "per ciascun elemento" prendi il valore, moltiplichi per X e risetti il nuovo valore (o meglio inserisci in un nuovo ArrayList).

Se vuoi lasciare intatto il ArrayList originale ed anche abbreviare il tutto, da Java 8 usi la Stream API e una lambda expression.