Criar, Editar e Remover determinado item de um ArrayList

Pessoal.

public ArrayList<Integer> buscaMenorCaminho()
{
   ArrayList<Integer> buscaMenorCaminhoAL = new ArrayList<Integer>();
   int menor = distancia;
   int PontoA, PontoB, pontoDistanciaAB;

   buscaMenorCaminhoAL.add(null);
   buscaMenorCaminhoAL.add(null);
   buscaMenorCaminhoAL.add(null);
   buscaMenorCaminhoAL.add(null);

   for (int i = 0; i < this.menorCaminhoAL().size(); i++)
        {    
            pontoA = this.menorCaminhoAL().get(i);
            pontoB = this.menorCaminhoAL().get(i+1);
            pontoDistanciaAB = this.menorCaminhoAL().get(i+2);
            ArrayList<Integer> buscaDistancia = this.buscaDistancia(pontoB, this.pontoA);
            int a = buscaDistancia.get(0);
            int b = buscaDistancia.get(1);
            int c = buscaDistancia.get(2);

             if( pontoDistanciaAB + c < menor )
             {
                  if(buscaMenorCaminhoAL.size() == 2)
                  {      
                       buscaMenorCaminhoAL.add(null);
                       buscaMenorCaminhoAL.add(null);
                   }
                   menor = pontoDistanciaAB + c;
                   buscaMenorCaminhoAL.set(0, pontoA);
                   buscaMenorCaminhoAL.set(1, pontoB);
                   buscaMenorCaminhoAL.set(2, a);
                   buscaMenorCaminhoAL.set(3, b);
              }
              else
              {
                    buscaMenorCaminhoAL.set(0, this.pontoA);
                    buscaMenorCaminhoAL.set(1, this.pontoB);

                    if (buscaMenorCaminhoAL.size() > 2)
                    {
                           buscaMenorCaminhoAL.remove(2);
                           buscaMenorCaminhoAL.remove(3);
                     }
                }
                 i = i + 2;
        }    

   return buscaMenorCaminhoAL;
}

A ideia aqui é se pontoDistanciaAB + c for menor que a variável menor, eu preciso set{ar} (configurar) o valor dos índices 0, 1, 2 e 3 do ArrayList . Porem, esses índices ainda não foram criados.

E se pontoDistanciaAB + c for maior ou igual a varável a, preciso set{ar} apenas os índices 0 e 1. E no caso remover os índices 3 e 4.

Isso em uma volta do loop.

Para a próxima volta, Pode acontecer que os indices 0 e 1 no primeiro if já tenham sido criados mas os índices 2 e 3 ainda não;.

No final, o ArrayList retorno só poderá ter no máximo 4 posições.

Como resolver esses problemas?

Erro:

C:\java\AD2>java Principal
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
        at java.util.ArrayList.rangeCheck(Unknown Source)
        at java.util.ArrayList.remove(Unknown Source)
        at MenorCaminho.buscaMenorCaminho(MenorCaminho.java:100)
        at Principal.main(Principal.java:44)

C:\java\AD2>

Inverta as linhas 42 e 43 do código postado.

buscaMenorCaminhoAL.remove(3); buscaMenorCaminhoAL.remove(2);

Explicação: após remover o índice 2 (0,1,2,3) seu arraylist passa a ter apenas 3 índices apenas (0,1,2).

Queria te agradecer mas descobri que essa segunda parte do código não havia necessidade.

Trata-se de um trabalho de faculdade muito enjoado de fazer e não acho correto ficar toda hora tirando dvvida.

Trata-se de implementaçao semelhante ao algoritmo de Dijsktra para encontrar menor caminho.

Depois de tudo pronto descobri que não esta de acordo com o pedido. Fiz umas 6 classes.

Mais uma vez. Muito obrigado!