2017-08-11 54 views
-4
if (mWeakHashMap.size() > idx) { 
     mUploadThreads.remove(mUploadThreads.elementAt(idx)) 
} 

爲什麼上面的代碼拋出了IndexOutOfBoundsExceptionjava.lang.IndexOutOfBoundsException:集合不包含索引4處的元素

任何人都可以幫助我嗎?

+1

您正在檢查'mWeakHashMap.size'並從'mUploadThreads'中移除 - 這沒有任何意義... – alfasin

+0

我很抱歉,我沒有清楚地解釋上面的代碼:mWeakHashMap是對mUploadThread 。 – Jackson

+0

你確認他們指向相同的數據嗎? –

回答

0

我認爲這是因爲您要從集合中刪除元素而不先檢查其大小。你應該檢查的反而是:

if(mUploadThreads.size() > idx) 
0

HashMapconstainsKeyremove方法,你可以用它來有效地檢查是否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 
*/ 

因此,在你的榜樣,如果mWeakHashMapmUploadThread一個參考,我會改變你檢查和刪除元素的東西更是這樣的方式:

if (mWeakHashMap.constainsKey("<Your_Key>")) { 
     mUploadThreads.remove("<Your_Key>"); 
} 

希望這有助於。

相關問題