Incredibilmente in ritardo alla festa (le mie scuse), ma una soluzione più generica rispetto a quelle qui fornite possono essere implementate (lavorerà con primitive e non-primitive simili):
public static void swap(final Object array, final int i, final int j) {
final Object atI = Array.get(array, i);
Array.set(array, i, Array.get(array, j));
Array.set(array, j, atI);
}
si perde in fase di compilazione tempo di sicurezza , ma dovrebbe fare il trucco.
Nota I: Otterrete un NullPointerException
se il dato è array
null
, un IllegalArgumentException
se il dato è array
non una matrice e un ArrayIndexOutOfBoundsException
se uno degli indici non sono validi per la data array
.
Nota II: Avere metodi separati per questo per ogni tipo array (Object[]
e tutti i tipi primitivi) sarebbe più performante (utilizzando gli altri approcci qui riportati) dal momento che questo richiede un po 'di boxe/unboxing. Ma sarebbe anche molto più codice da scrivere/mantenere.
Per stringa? No, non proprio. Se hai bisogno di farlo spesso potresti anche eseguire una sola volta la tua funzione e non è una seccatura – Grambot
Se puoi lavorare con List invece che con Array, puoi usare Collections.swap (List, i, j). –
@Sergio Nakanishi: Interesting Point, forse sarò in grado di passare alle collezioni, tuttavia non sono sicuro che l'uso di array puro non sia più veloce? – Robin