2016-05-04 93 views
0

這可能是重複的,但我看不到任何與此錯誤的問題,所以道歉,如果是這樣。ArrayList刪除方法不起作用?

我正在嘗試使用remove()方法從我的ArrayList中刪除整數,但它給了我java.lang.UnsupportedOperationException。刪除方法應該採取int或整數我的理解,或從ArrayList值,但這些似乎並沒有工作,並給出相同的錯誤。

我也嘗試使用「深度」作爲index,因爲這是我想要刪除的index

這裏是我的代碼:

import java.util.*; 

public class EP{ 
public static List<Integer> items = Arrays.asList(12, 13, 48, 42, 38,  2827, 827, 828, 420); 
public static void main(String[]args){ 
System.out.println("Exam List"); 
for(Integer i: items){ 
    System.out.println(i); 
} 
    Scanner scan = new Scanner(System.in); 
System.out.println("Enter depth"); 
int depth = scan.nextInt(); 
System.out.println("Enter value"); 
int value = scan.nextInt(); 
System.out.println(mark(depth, value)); 
} 

public static int mark(int depth, int value){ 
int ret = -1; //This ensures -1 is returned if it cannot find it at the specified place 
for(Integer i: items){ 
    if(items.get(depth) == (Integer)value){ //This assummes depth starts at 0 
    ret = value; 
    items.remove(items.get(depth)); // has UnsupportedOperationException 
    } 
    } 
System.out.println("Updated Exam List"); 
for(Integer j: items){ 
    System.out.println(j); 
} 
return ret; 
} 
} 
+1

請格式化您的代碼。這完全難以辨認。 –

+0

Arrays.asList()不返回ArrayList。我會喜歡你發現是否可以修改由Arrays.asList()返回的列表實現。查看使用簡單for循環迭代,使用增強for循環迭代和使用List迭代器迭代之間的區別。另請參閱您可以在迭代使用Iterator或增強for循環時修改列表,以及何時不能這樣做。當你研究這些時,你將清楚你在代碼中所做的一切,以及你正在接受的例外。在你的情況下修改雖然迭代不是異常的原因,但研究仍然 –

+0

請參閱[this](http://stackoverflow.com/a/158269/5394855)後有關從'Array'創建'ArrayList'的帖子。 –

回答

8

通過Arrays.asList返回的List實現並不java.util.ArrayList。這是Arrays類中定義的一個不同的實現,它是一個固定大小的List。因此,您不能在該List上添加/刪除元素。

您可以通過創建您的List的元素初始化的新java.util.ArrayList解決這個問題:

public static List<Integer> items = new ArrayList<>(Arrays.asList(12, 13, 48, 42, 38, 2827, 827, 828, 420)); 

這就是說,呼叫從一個循環內items.remove是遍歷items使用增強的for循環將無法正常工作(它會拋出CuncurrentModificationException)。您可以使用傳統的for循環代替(或者,如果您想要刪除Iterator指向的當前元素,則顯式爲Iterator,但似乎並非如此)。

+0

謝謝,它現在很好用:) –