if (mWeakHashMap.size() > idx) {
mUploadThreads.remove(mUploadThreads.elementAt(idx))
}
爲什麼上面的代碼拋出了IndexOutOfBoundsException
?java.lang.IndexOutOfBoundsException:集合不包含索引4處的元素
任何人都可以幫助我嗎?
if (mWeakHashMap.size() > idx) {
mUploadThreads.remove(mUploadThreads.elementAt(idx))
}
爲什麼上面的代碼拋出了IndexOutOfBoundsException
?java.lang.IndexOutOfBoundsException:集合不包含索引4處的元素
任何人都可以幫助我嗎?
我認爲這是因爲您要從集合中刪除元素而不先檢查其大小。你應該檢查的反而是:
if(mUploadThreads.size() > idx)
的HashMap
有constainsKey
和remove
方法,你可以用它來有效地檢查是否key
在地圖上試圖將其刪除。
下面是一個基本的例子,我將兩個元素添加到一個HashMap中,然後刪除其中一個元素。
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("Key1", "Value1");
map.put("Key2", "Value2");
System.out.println(String.format("Map size: %d", map.size()));
if (map.containsKey("Key2")) {
map.remove("Key2");
}
System.out.println(String.format("Map size: %d", map.size()));
}
}
/* Output
Map size: 2
Map size: 1
*/
因此,在你的榜樣,如果mWeakHashMap
是mUploadThread
一個參考,我會改變你檢查和刪除元素的東西更是這樣的方式:
if (mWeakHashMap.constainsKey("<Your_Key>")) {
mUploadThreads.remove("<Your_Key>");
}
希望這有助於。
您正在檢查'mWeakHashMap.size'並從'mUploadThreads'中移除 - 這沒有任何意義... – alfasin
我很抱歉,我沒有清楚地解釋上面的代碼:mWeakHashMap是對mUploadThread 。 – Jackson
你確認他們指向相同的數據嗎? –