Ciao.Allora List è un interfaccia e ArrayList è una classe che la implementa, fanno parte del package java.util. Ad ogni riferimento di interfaccia tu puoi assegnare un riferimento della classe che la implementa, adesso però se nel tuo codice tu scrivi
ArrayList<Carta> mazzo = new ArrayList<Carta>();
decidi defnitivamente di utilizzare come tipo lista un ArrayList.Una motivazione è la seguente:se tu decidi ad esempio di non utilizzare più ArrayList perchè hai bisogno di un altro tipo di Lista (ad esempio una LinkedList o Vector) tutto il codice che utilizza la variabile mazzo deve essere rivisto ed aggiornato opportunamente se necessario.Se invece scrivi
List<Carta> mazzo = new ArrayList<Carta>();
puoi sempre cambiare l'ArrayList con un tipo che implementa l'interfaccia List senza che questo impatti su tutto il resto del codice (stai utilizzando il polimorfismo).