Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Adicionar elemento String em uma ArrayList em uma determinada posição

Olá!

Galera, gostaria saber se é possível adicionar um elemento String em uma determinada posição de um ArrayList.

package arraylists;

import java.util.ArrayList;
import java.util.List;

public class Principal {

    public static void main(String[] args) {
        List<String> listaCores = new ArrayList<String>(40); 
        listaCores.add(4,"Azul");

        System.out.println(listaCores.toString());

    }

}

Acredito que não seja, pois está sendo lançado um exceção de Index fora da "margem", tamanho:0 e Index:4.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0
    at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:787)
    at java.base/java.util.ArrayList.add(ArrayList.java:512)
    at arraylists.Principal.main(Principal.java:10)
2 respostas
solução!

Como a lista está vazia, o espaço no índice 4 "não existe". Ao fazer List<String> listaCores = new ArrayList<String>(40);, você está dizendo que o tamanho máximo do array é 40, mas não está, de fato, reservando esses espaços na memória. E ao fazer listaCores.add(4,"Azul"); você está tentando "trocar" o elemento a posição 4 do array pelo "Azul", o que é impossível já que não tem nada lá.

Tente executar esse código:

package br.com.bytebank.banco.test.util;

import java.util.ArrayList;
import java.util.List;

public class TesteArrayListDuvida {

    public static void main(String[] args) {

        List<String> listaCores = new ArrayList<String>(40); 

        listaCores.add("Azul");
        listaCores.add("Azul");
        listaCores.add("Azul");
        listaCores.add("Azul");
        listaCores.add("Azul");

        System.out.println(listaCores.size());
        System.out.println(listaCores.toString());
        System.out.println(listaCores.get(4));

        listaCores.add(4,"Vermelho");
        System.out.println("Inseri o Vermelho na posição 4");

        System.out.println(listaCores.size());
        System.out.println(listaCores.toString());
        System.out.println(listaCores.get(4));

    }
}

Perceba que você só é capaz de inserir o elemento "Vermelho" na lista, pois a posição 4 já está ocupada por outro elemento.

Se ficou qualquer dúvida, avisa aí! Bons estudos!

Obrigado, Thiago

A minha dúvida era exatamente essa, quando eu instaciar um ArrayList de 40 posições então não vai reservar as 40 posições de espaço na memória de uma só vez, então o ArrayList de fato é uma lista sequenciada que só vai ser inserido uma posição por ordem e por vez. Pra o que eu quero vou procurar outro Collection que atenda as minhas necessidades. Obrigado pela Força!! Tenha um ótimo dia.

Obrigado!