1

这可能真的很简单,但我真的无法在谷歌上正确地用词。我有一个 ArrayList 保存每个线程的信息。每个线程都有自己的 ID。所以,一开始:

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

当我想要信息时:

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

但是,每当较低的线程完成并删除其条目等时,我总是会得到 OutOfRangeExceptions。所以,我确信必须有一个更好的类可以用于此,我可以将条目放在我想要的任何索引处,然后拉取它们在我想要的任何索引上,他们都会留下来。

4

2 回答 2

9

对于这种访问,您应该真正使用数组,或者更好的是 HashMap。为此使用列表非常低效且不必要地复杂。如果您从列表中间删除了一个项目,那么所有内容都会向下移动,并且您删除的索引上方的所有索引都需要向下移动。

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

改用 HashMap - 您可以使用整数作为键,删除不会导致重新排序。

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

添加、检索和删除条目:

myInfos.put( Integer.valueOf( 4 ), new InfoForTheThread() );
InfoForTheThread infoForFour = myInfos.get( Integer.valueOf( 4 ) );
InfoForTheThread infoForFour = myInfos.remove( Integer.valueOf( 4 ) );
于 2009-02-28T22:33:21.017 回答
3

尝试哈希表。您可以使用线程 ID 作为键,然后将您的信息作为值插入。

于 2009-02-28T22:30:25.953 回答