Sto scrivendo una funzione per sommare due array (di dimensioni non necessariamente uguali) in Java e restituire il risultato.Come sommare gli array in Java
Ecco il mio tentativo:
public static <T> T[] sumArrays(T[] lhs, T[] rhs)
{
T[] out = new T[Math.max(lhs.length, rhs.length)];
for (int i = 0; i < Math.max(lhs.length, rhs.length); ++i){
if (i < Math.min(lhs.length, rhs.length)){
out[i] = lhs[i] + rhs[i];
} else if (i < lhs.length){
out[i] = lhs[i];
} else /* if (i < rhs.length)*/{
out[i] = rhs[i];
}
}
return out;
}
Ma ho alcune osservazioni nonostante gli errori di compilazione.
Perché questa funzione non è presente nella libreria Java, che è estremamente gigantesca?
Ero motivato a usare i generici, come usereste i modelli in C++.
Sono preoccupato di ottenere copie profonde dei dati di input;
lhs
e `` rhs. Qualcuno può rassicurarmi su questo? Il C++ mi consente di passare un riferimento costante; e lo saprò per certo.L'istanziazione di
T[]
out sembra essere illegale con un tipo generico. Cosa mi manca?Il compilatore ottimizzerà il mio ripetuto
Math.max(lhs.length, rhs.length)
?Compilatore non conforme allo
lhs[i] + rhs[i]
. Presumibilmente perché non conosce il tipo di T, ma il C++ ti permette di fare ciò poiché non tenterà di compilare un modello finché non conosce il tipo.
6) stanno andando a prendere una copia profonda di quando ritorno? Ancora una volta, i compilatori C++ non prenderebbero una copia extra.
Forse sono troppo vecchio per abituarsi a Java ;-)
Annuncio 3) http://javadude.com/articles/passbyvalue.htm –
Aggiungere il contenuto di due array di lunghezza irregolare non è necessariamente un comune attività, non l'ho mai fatto. Se si trattava allora di dividere due array, sottraendo due array, aumentando una voce da una matrice alla potenza dell'altro ecc ecc ecc. Java offre gli strumenti per farlo se ne hai bisogno –
'T' è sconosciuto in fase di runtime ed è per questo che non puoi fare 'new T []' – blank