我有一個ArrayList
。當我嘗試刪除一個項目時,我得到一個UnsupportedOperationException
。我該如何解決它?請任何人幫忙。如何從java中的List接口中刪除項目?
這裏我的代碼是:
static List<String> availableFormsList = new ArrayList<String>();
availableFormsList.add("a");
availableFormsList.remove("a");
我有一個ArrayList
。當我嘗試刪除一個項目時,我得到一個UnsupportedOperationException
。我該如何解決它?請任何人幫忙。如何從java中的List接口中刪除項目?
這裏我的代碼是:
static List<String> availableFormsList = new ArrayList<String>();
availableFormsList.add("a");
availableFormsList.remove("a");
java.util.ArrayList
支持去除的元素。檢查availableFormsList
未被替換爲List
(例如Arrays.asList
)的另一個實施。
我使用AM availableFormsList = Arrays.asList(answersList)
這使得替換List
參考具有固定尺寸List
從哪些元素不能被刪除。解決方案:請勿將availableFormsList
替換爲List
。
我正在使用availableFormsList = Arrays.asList(answersList);用於在列表中存儲值。 – user2466123
@ user2466123由於Arrays.asList的大小是固定的,因此不能從該List中移除。如果你已經有一個'List',爲什麼要使用'Arrays.asList'? – Reimeus
@ user2466123這不是您在問題中發佈的內容! – fGo
這只是正常:
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);
}
}
}
你可能會通過你聲明的另一個ArrayList的?
public static class ArrayList<T> extends java.util.ArrayList<T> {
public boolean remove(Object o) {
throw new UnsupportedOperationException();
}
}
否則,您已經發布了與正在執行的代碼不同的代碼。
+1你在這裏的正確軌道;實際上,'Arrays.asList'返回一個名爲'ArrayList'的靜態嵌套類的實例。 –
我明白了。謝謝! – Tala
由於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()來生成列表。
如果您對此答案進行了表決,那麼知道原因會很有幫助。 – zEro
你有沒有試過?
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());
}
}
爲什麼你的列表是靜態的? – zEro
是在添加和刪除之間以任何方式修改的列表(可能是不同的線程)? –
你應該得到靜態列表 availableFormsList = new ArrayList ();' –