Oi!
Ao que verifiquei, somente o ArrayList não resolve sua necessidade.
Podes usar um List e implementar a interface Comparator para organizar a lista como desejar, mas veja bem, tem um detalhe importante.
O correto (mais adequado) é que as informações apresentadas estejam em um objeto e você tenha uma lista destes objetos. No caso, você vai ter os famosos gets e setters. Mesmo que não queira fazer nesse formato (recomendo e muito) você deve possuir um modo de apresentar o valor da coluna “ordem”, concorda? Sendo assim, você precisa pensar no algoritmo de modo que quando remover um objeto da lista ele e todos os outros atualizem esse valor, que nada mais é que decrementar um nível. Certo?
Então, só popular uma lista não vai resolver tua necessidade. Pense na possibilidade de usar uma LinkedList, ela mantém a ordem de inserção e os respectivos indices. Qual o problema dela? Ela é extremamente lenta quando falamos em remover um objeto, pois, supondo que você queira remover um objeto da posição 50, ela vai posição a posição até chegar na 50, diferente da ArrayList, entretanto, não sei a quantidade de registros que você virá a ter nessa lista, pois se forem poucos, talvez seja válido usa-la.
De resto, é com você.