Eu acho que é uma pergunta bastante simples, mas não consigo descobrir como fazer isso corretamente.
Eu tenho uma lista de matriz vazia:
ArrayList<object> list = new ArrayList<object>();
Eu tenho alguns objetos que quero adicionar e cada objeto deve estar em uma determinada posição. É necessário, no entanto, que eles possam ser adicionados em cada ordem possível. Quando tento isso, ele não funciona e recebo um IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
O que eu tentei é enchendo o ArrayList
com null
e, em seguida, fazer o acima. Funciona, mas acho que é uma solução horrível. Há outra maneira de fazer isso?
Respostas:
Você pode fazer assim:
Depois de adicionar o objeto2 à posição 2, ele moverá o objeto3 para a posição 3.
Se você quiser que o objeto3 esteja na posição3 o tempo todo, sugiro que você use um HashMap com posição como chave e objeto como valor.
fonte
Você pode usar Array of objects e convertê-lo em ArrayList-
ArrayList será- [1, nulo, 2, 3, nulo, nulo, nulo, 7, nulo, nulo]
fonte
Se for esse o caso, por que você não considera usar uma matriz comum, inicialize a capacidade e coloque objetos no índice desejado.
fonte
Você também pode substituir ArrayList para inserir nulos entre o seu tamanho e o elemento que deseja adicionar.
Em seguida, você pode adicionar a qualquer momento da ArrayList. Por exemplo, este método principal:
gera esse resultado do console:
0: zero
1 um
2: dois
3: nulo
4: nulo
5: cinco
fonte
Chamo sua atenção para a
ArrayList.add
documentação , que diz que é lançadaIndexOutOfBoundsException
- se o índice estiver fora do intervalo (index < 0 || index > size()
)Verifique a
size()
lista antes de ligarlist.add(1, object1)
fonte
list.add("element");
Você precisa preencher os índices vazios com valores nulos.
fonte
ao tentar adicionar um elemento na posição especificada, você obtém IndexOutOfBound, portanto a lista deve ter alguns elementos em sua posição.
Por favor, tente seguir
fonte
Que tal esse pequeno
while
laço como solução?fonte
Esta é uma solução possível:
fonte
Eu acho que a solução da medopal é o que você está procurando.
Mas apenas outra solução alternativa é usar um HashMap e usar a tecla (Inteiro) para armazenar posições.
Dessa forma, você não precisará preenchê-lo com valores nulos, etc. inicialmente, apenas mantenha a posição e o objeto no mapa à medida que avança. Você pode escrever algumas linhas no final para convertê-lo em uma lista, se precisar dessa maneira.
fonte
Suponha que você queira adicionar um item a uma posição, então o tamanho da lista deve ser maior que a posição.
add(2, item)
: essa sintaxe significa, mova o item antigo na posição 2 para o próximo índice e adicione o item na 2ª posição.Se não houver nenhum item na 2ª posição, isso não funcionará, gerará uma exceção.
Isso significa que se você quiser adicionar algo
position 2,
o tamanho da sua lista deve ser pelo menos
(2 + 1) =3,
para que os itens estejam disponíveis em0,1,2 Position.
dessa maneira, garante-se que a posição 2 seja acessada com segurança e não haverá exceção.
fonte
Se você estiver usando o sabor Android do Java, posso sugerir o uso de um SparseArray . É um mapeamento mais eficiente da memória de números inteiros para objetos e mais fácil de iterar do que um Mapa
fonte
Um pouco tarde, mas espero que ainda possa ser útil para alguém.
2 etapas para adicionar itens a uma posição específica em um
ArrayList
add
itens nulos para um índice específico em umArrayList
Em seguida,
set
as posições como e quando necessário.Dessa forma, você não possui itens redundantes no
ArrayList
ie, se você deseja adicionar itens como,Isso não sobrescreveria apenas os itens existentes na posição, deslocando os existentes para a direita por um - para que você tenha um ArrayList com o dobro de indicações.
fonte
Você deve definir em vez de adicionar para substituir o valor existente no índice.
A lista conterá [objeto1, objeto2]
fonte