ciao, si sono 20 milioni di record.
io ho provato a fare cosi e lo ordina metto il codice sotto.

il problema è che non riesco a farlo con i tipi generici.
mi potresti dare una mano per capire come funzionano i tipi generici ?

grazie mille

codice:
package sort;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;


public class mainSort {


	public static void main(String[] args) {
		
		try{
			ArrayList<records> lista = new ArrayList<records>();
												
			FileReader input = new FileReader("C:/file.csv");
			BufferedReader f = new BufferedReader(input); 
			
			String linea ;
			int i = 0;
			
			while((linea = f.readLine()) != null){
				
				int id = Integer.parseInt(linea.split(",")[0]);
				String field1 = linea.split(",")[1];
				int field2 = Integer.parseInt(linea.split(",")[2]);
				float field3 = Float.parseFloat(linea.split(",")[3]);
				
				lista.add(new records(id, field1, field2, field3 ));
				System.out.println(i++);
			}
			
			f.close();
						
			insertionSort s = new insertionSort(lista);
			
			s.sort();
			
			for(records p: s.getInputList()){
				System.out.println(p.getField2());
			}


		}
		catch(Exception e){
			System.out.println("verificato un errore");
		}
		


	}


}
codice:
package sort;


import java.util.ArrayList;


public class insertionSort {


	private ArrayList<records> inputList = new ArrayList<records>();
	
	public ArrayList <records> getInputList() {
        return inputList;
    }
	
	
	
	//costruttore
	//tramite il costruttore passiamo a insertionSort la lista
	public insertionSort(ArrayList<records> input){
		
		this.inputList = input;
		
	}
	
	
	
	public void sort (){
				
		records tmp ;
		
		for(int i=1; i< inputList.size(); i++){
			
			for(int j = i; j>0; j--){
				
				int key = inputList.get(j).getField2();
				
				if(key < inputList.get(j-1).getField2()){
					
					tmp = inputList.get(j);
					
					inputList.set(j, inputList.get(j-1));
					inputList.set(j-1, tmp);
					
				}
				
			}
			
		}
		
				
				
	}
	
	
	
}
codice:
package sort;


public class records {
	
	private int id;
	private String field1;
	private int field2;
	private float field3;
	
	public records(int id, String field1, int field2, float field3){
		this.id = id;
		this.field1 = field1;
		this.field2 = field2;
		this.field3 = field3;
		
	}
	
	public int getId(){
		return id;
	}
	
	public String getField1(){
		return field1;
	}
	
	public int getField2(){
		return field2;
	}
	
	public float getField3(){
		return field3;
	}
	
	


}