Domanda

Questa è probabilmente molto semplice ma davvero non poteva parola correttamente su Google. Ho un ArrayList che mantiene le informazioni per ciascun thread. Ogni thread ha il proprio ID. Così, all'inizio:

myList.add(theIdOfTheThread, new InfoForTheThread()); //Add new thread info at index theIdOfTheThread

E quando voglio informazioni:

myList.get(myId); //The info for the thread

Ma, ho sempre arrivare OutOfRangeExceptions ogni volta una minore finiture filo e rimuove la sua entrata, ecc Quindi, io sono sicuro che ci deve essere una classe migliore da utilizzare per questo, in cui posso solo mettere le voci in qualsiasi indice che voglio, e tirare fuori a qualsiasi indice che voglio e rimangono.

È stato utile?

Soluzione

Per quel tipo di accesso che si dovrebbe davvero fare uso di un array, o meglio, una HashMap. Usando una lista per questo è molto inefficiente e inutilmente complicato. Se mai rimuove un elemento dalla metà della lista tutto si muoverà verso il basso, e tutti gli indici sopra quello è stato rimosso richiederà lo spostamento verso il basso.

Una serie di InfoForTheThread non soffrirà questo, ma avrete bisogno di conoscere la dimensione della matrice è necessario prima di iniziare.

Utilizzare una HashMap invece -. È possibile utilizzare numeri interi per i tasti, e la rimozione non si tradurrà in un resequencing

HashMap<Integer,InfoForTheThread> myInfos = new HashMap<Integer,InfoForTheThread>( 10 );

L'aggiunta, il recupero e la rimozione di una voce:

myInfos.put( Integer.valueOf( 4 ), new InfoForTheThread() );
InfoForTheThread infoForFour = myInfos.get( Integer.valueOf( 4 ) );
InfoForTheThread infoForFour = myInfos.remove( Integer.valueOf( 4 ) );

Altri suggerimenti

Provare una tabella hash. è possibile utilizzare l'ID come la chiave e quindi inserire le tue informazioni come i valori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top