2013-06-21 28 views
-4

我有一個ArrayList。當我嘗試刪除一個項目時,我得到一個UnsupportedOperationException。我該如何解決它?請任何人幫忙。如何從java中的List接口中刪除項目?

這裏我的代碼是:

static List<String> availableFormsList = new ArrayList<String>(); 
availableFormsList.add("a"); 
availableFormsList.remove("a"); 
+0

爲什麼你的列表是靜態的? – zEro

+0

是在添加和刪除之間以任何方式修改的列表(可能是不同的線程)? –

+1

你應該得到靜態列表 availableFormsList = new ArrayList ();' –

回答

1

java.util.ArrayList支持去除的元素。檢查availableFormsList未被替換爲List(例如Arrays.asList)的另一個實施。

我使用AM availableFormsList = Arrays.asList(answersList)

這使得替換List參考具有固定尺寸List從哪些元素不能被刪除。解決方案:請勿將availableFormsList替換爲List

+0

我正在使用availableFormsList = Arrays.asList(answersList);用於在列表中存儲值。 – user2466123

+0

@ user2466123由於Arrays.asList的大小是固定的,因此不能從該List中移除。如果你已經有一個'List',爲什麼要使用'Arrays.asList'? – Reimeus

+0

@ user2466123這不是您在問題中發佈的內容! – fGo

1

這只是正常:

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

/** 
* ListDemo 
* @author mduffy 
* @since 6/21/13 7:45 AM 
* @link http://stackoverflow.com/questions/17234415/how-to-remove-item-from-list-interface-in-java 
*/ 
public class ListDemo { 

    public static void main(String[] args) { 
     List<String> availableForms = new ArrayList<String>(); 
     Collections.addAll(availableForms, args); 
     System.out.println("before: " + availableForms); 
     if (args.length > 0) { 
      availableForms.remove(args[0]); 
      System.out.println("after : " + availableForms); 
     } 
    } 
} 
+0

'java ListDemo hello world' – fGo

+0

OP特別詢問了關於靜態變量的問題..我認爲談論這個更重要。顯然他的代碼甚至不應該被編譯。 – zEro

+1

我認爲重要的是要展示它的工作原理,這就是我發佈的內容。如果您有答案,請發佈。我不需要評論。 – duffymo

0

你可能會通過你聲明的另一個ArrayList的?

public static class ArrayList<T> extends java.util.ArrayList<T> { 

    public boolean remove(Object o) { 
     throw new UnsupportedOperationException(); 
    } 
} 

否則,您已經發布了與正在執行的代碼不同的代碼。

+1

+1你在這裏的正確軌道;實際上,'Arrays.asList'返回一個名爲'ArrayList'的靜態嵌套類的實例。 –

+0

我明白了。謝謝! – Tala

-1

由於OP專門詢問變量是靜態的情況,我將添加另一個答案。

public class Test { 
    static List<String> availableFormsList = new ArrayList<String>(); 

    /** 
    * @param args 
    * @throws IOException 
    */  
    public static void main(String[] args) throws IOException { 
     availableFormsList .add("a"); 
     System.out.println("Size: "+availableFormsList.size()); 
     availableFormsList.remove("a"); 
     System.out.println("Size: "+availableFormsList.size()); 
    } 
} 

而這不會引發任何錯誤。

編輯:現在很明顯,OP遺漏了一個重要的細節,即,他使用Arrays.asList()來生成列表。

+0

如果您對此答案進行了表決,那麼知道原因會很有幫助。 – zEro

0

你有沒有試過?

public class TestList { 

     static List<String> availableFormsList = new ArrayList<String>(); 

     public static void main(String arg[]) throws Exception { 

      String[] myStringArray = {"Java", "is", "Cool"}; 


      availableFormsList.addAll(Arrays.asList(myStringArray)); 
      availableFormsList.add("a"); 
      availableFormsList.remove("a"); 
      availableFormsList.add("Test"); 
      System.out.print("Test out put " + availableFormsList.toString()); 
     } 
    }