Java: dividir uma lista em duas sub-listas?

Qual é a maneira mais simples, mais padrão e / ou mais eficiente de dividir uma lista em duas sub-listas em Java? Não há problema em alterar a lista original, portanto, nenhuma cópia deve ser necessária. A assinatura do método pode ser

/** Split a list into two sublists. The original list will be modified to
 * have size i and will contain exactly the same elements at indices 0 
 * through i-1 as it had originally; the returned list will have size 
 * len-i (where len is the size of the original list before the call) 
 * and will have the same elements at indices 0 through len-(i+1) as 
 * the original list had at indices i through len-1.
 */
<T> List<T> split(List<T> list, int i);

[EDITAR]List.subList retorna uma exibição na lista original, que se torna inválida se o original for modificado. assimsplit não pode usarsubList a menos que também dispense a referência original (ou, como na resposta de Marc Novakowski, usesubList mas copia imediatamente o resultado).

questionAnswers(13)

yourAnswerToTheQuestion