允许使用空白的Java列表

Isa*_*ler 1 java list outofrangeexception

这可能非常简单,但我真的无法在谷歌上正确说出来.我有一个ArrayList来保存每个线程的信息.每个线程都有自己的ID.所以,在开始时:

myList.add(theIdOfTheThread, new InfoForTheThread()); //Add new thread info at index theIdOfTheThread
Run Code Online (Sandbox Code Playgroud)

当我想要信息时:

myList.get(myId); //The info for the thread
Run Code Online (Sandbox Code Playgroud)

但是,每当较低的线程完成并删除它的条目等时,我总是得到OutOfRangeExceptions.所以,我确信必须有一个更好的类来使用它,我可以把条目放在我想要的任何索引,并拉它们在我想要的任何指数,他们留下来.

ban*_*ity 9

对于那种访问,你应该使用一个数组,或者更好的是一个HashMap.使用列表是非常低效和不必要的复杂.如果你从列表中间删除一个项目,一切都会向下移动,而你删除的那个上面的所有索引都需要向下移动.

InfoForTheThread数组不会受此影响,但您需要在开始之前知道所需的数组大小.

使用HashMap - 您可以使用Integers作为键,并且删除不会导致重新排序.

HashMap<Integer,InfoForTheThread> myInfos = new HashMap<Integer,InfoForTheThread>( 10 );
Run Code Online (Sandbox Code Playgroud)

添加,检索和删除条目:

myInfos.put( Integer.valueOf( 4 ), new InfoForTheThread() );
InfoForTheThread infoForFour = myInfos.get( Integer.valueOf( 4 ) );
InfoForTheThread infoForFour = myInfos.remove( Integer.valueOf( 4 ) );
Run Code Online (Sandbox Code Playgroud)