Quote Originariamente inviata da processore Visualizza il messaggio
ciao, si sono 20 milioni di record.
Allora ribadisco che una cosa a cui dovrai sicuramente prestare attenzione è il dimensionamento del heap space, perché altrimenti la applicazione ti andrà in crash molto velocemente.

Quote Originariamente inviata da processore Visualizza il messaggio
il problema è che non riesco a farlo con i tipi generici.
mi potresti dare una mano per capire come funzionano i tipi generici ?
Prima, se permetti, alcune questioni più fondamentali, ovvero sulle denominazioni. I nomi di classi dovrebbero iniziare con la maiuscola, quindi InsertionSort invece che insertionSort. E poi Record invece che records. Nota che la tua classe del record modella 1 record, non N. Quindi non è granché appropriato chiamarla records.

Poi il tuo metodo sort() non mi pare che sia un "insertion sort". Gli algoritmi di ordinamento generalmente non li si "inventa" (ce ne sono già anche troppi). Basta cercare informazioni su uno specifico, es. https://it.wikipedia.org/wiki/Insertion_sort
E seguire il concetto/algoritmo.

Riguardo il criterio di ordinamento in effetti ci sono diverse strade. Tu hai più criteri di ordinamento, come dicevi prima: "ripetere l'ordinamento tre volte, una volta per ciascun campo".
Ora: o replichi l'algoritmo più volte, incapsulando il criterio di ordinamento dentro l'algoritmo (come stavi facendo) oppure puoi cercare di generalizzarlo, esattamente come fanno i sort del framework.

Il framework ha Arrays.sort() e Collections.sort() (non usa insertion sort ma un altro algoritmo). Questi sort implementano SOLO l'algoritmo di ordinamento ma il criterio di comparazione è delegato agli oggetti stessi da ordinare (se implementano Comparable) oppure ad un Comparator esterno.