Java Lista com espaço em branco permitido
-
11-09-2019 - |
Pergunta
Este é provavelmente muito simples, mas eu realmente não podia palavra-lo corretamente no Google. Eu tenho um ArrayList que mantém a informação para cada segmento. Cada segmento tem sua própria ID. Então, no início:
myList.add(theIdOfTheThread, new InfoForTheThread()); //Add new thread info at index theIdOfTheThread
E quando eu quiser informações:
myList.get(myId); //The info for the thread
Mas, eu sempre chegar OutOfRangeExceptions sempre que um segmento menor acabamentos e remove sua entrada, etc. Então, eu tenho certeza que deve haver uma classe melhor uso para este, onde posso apenas colocar entradas a qualquer índice que eu quero, e retirá-los em qualquer índice que quero e eles ficam.
Solução
Para esse tipo de acesso que você realmente deve estar usando uma matriz, ou melhor, um HashMap. Usando uma lista para isso é muito ineficiente e desnecessariamente complicado. Se você nunca remover um item a partir do meio da lista de tudo o que se move para baixo, e todos os índices acima do que você removido exigirá movendo para baixo.
Uma matriz de InfoForTheThread não vai sofrer isso, mas você vai precisar saber o tamanho da matriz que você vai precisar antes de começar.
Use um HashMap em vez -. Você pode usar inteiros para as chaves, e remoção não irá resultar em uma resequencing
HashMap<Integer,InfoForTheThread> myInfos = new HashMap<Integer,InfoForTheThread>( 10 );
Como adicionar, recuperar e remover uma entrada:
myInfos.put( Integer.valueOf( 4 ), new InfoForTheThread() );
InfoForTheThread infoForFour = myInfos.get( Integer.valueOf( 4 ) );
InfoForTheThread infoForFour = myInfos.remove( Integer.valueOf( 4 ) );
Outras dicas
Tente um hashtable. você pode usar o identificador do tópico como a chave e, em seguida, inserir suas informações de como os valores.