我正在使用List
來保存通過調用Array.asList()
方法獲得的一些數據。然後,我試圖使用myList.Remove(int i)
方法刪除元素。但是,當我試圖做到這一點,我得到了UnsupportedOperationException
。這是什麼原因?我應該如何解決這個問題?UnsupportedOperationException嘗試從Array.asList返回的列表中刪除時
回答
Array.asList()
包裹列表界面的數組。該列表仍然由數組支持。數組的大小是固定的 - 它們不支持添加或刪除元素,所以包裝器也不支持。
的文檔不使這個明確的,因爲他們可能會,但他們做說:
返回由指定數組支持的固定大小的列表。
的「固定大小」位應該是你不能添加或刪除元素:)
暗示雖然有解決這個其他方式(其他的方法來從一個數組創建一個新的ArrayList
)沒有額外的庫,我個人建議抓住Google Collections Library(或Guava,當它被釋放)。然後,您可以使用:
List<Integer> list = Lists.newArrayList(array);
我建議這樣做的原因是,保利協鑫是一個普遍好東西,值得使用。
正如評論中指出的,這需要拷貝的數組;該列表不支持原始數組,並且兩個集合中的更改都不會在另一箇中看到。
您從asList收到的實現不會實現完整的List接口。我會將列表轉換爲ArrayList,然後對其進行修改。
見http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html#remove%28int%29
你的意思是遍歷這個列表,並把所有的對象一個ArrayList在開始? –
不,ArrayList構造函數將Collection作爲參數,因此您可以調用新的ArrayList。 –
這不是java.util.ArrayList
。 Arrays.asList()
返回自己的List
實現,並且不支持刪除。你可以創建一個真正的ArrayList
:
new java.util.ArrayList(Arrays.asList(someArray));
這是非常令人困惑如何asList()
的作品,我必須承認。
因爲你得到只讀列表。 嘗試
List newList = new ArrayList(myList);
它不是隻讀的 - 它只是固定大小。 –
請閱讀API文檔Arrays.asList():
返回由指定數組支持的固定大小的列表。 (更改返回列表 「寫」到數組。)
注意Collections.remove(INT)被標記JavaDoc中爲「可選操作」,這意味着並不是所有的類別將支持它。 「固定大小列表」意味着您不能更改列表的大小,remove()會執行此操作。所以它不被支持。
如果您想更改Arrays.asList()生成的列表,只需複製它即可。 new ArrayList(Arrays.asList(...))
。
使用
的ArrayList不是List
名單已經固定大小元素,列表既不能加項,也不刪除項目
- 1. UnsupportedOperationException在嘗試從迭代器中刪除SelectionKey時拋出
- 2. python3 .remove返回無當我嘗試從列表中刪除一個變量
- 3. 列表理解返回的錯誤,同時嘗試/除非不
- 4. 嘗試返回列表中的數字
- 5. 嘗試從鏈接列表中刪除節點時出現NullPointerException?
- 6. 嘗試從列表中刪除元素時出現ConcurrentModificationException
- 7. UnsupportedOperationException嘗試對傳感器列表進行排序時
- 8. 從除Python3以外嘗試返回
- 9. 當我嘗試刪除標記時,Google Maps API返回'undefined'?
- 10. R:嘗試替換時刪除列
- 11. UnsupportedOperationException除去列表中的元素
- 12. 從鏈表中刪除並返回值
- 13. 嘗試刪除時MySql中的錯誤
- 14. 嘗試從鏈接列表返回數據時qt中的分段錯誤
- 15. 從表中刪除,並返回未刪除的記錄
- 16. 返回使用geopy時引發AttributeError的項目列表並嘗試/除外?
- 17. 嘗試除了從函數返回時爲False
- 18. 當我嘗試從列表中刪除元素時,如何忽略ValueError?
- 19. 嘗試從列表視圖中刪除對象時拋出異常
- 20. Linq查詢在嘗試從列表對象傳遞列值時返回null
- 21. 從列表中刪除回調函數?
- 22. 嘗試使函數返回一個列表時發生錯誤
- 23. 嘗試刪除文檔的第一列。
- 24. 如何從父代linearlayout中刪除返回列表視圖?
- 25. 從列表中foreach循環返回錯誤刪除項目
- 26. 嘗試訪問列表中的數據幀中的數據時返回NULL
- 27. 嘗試:除了:總是返回
- 28. 從列表中刪除值從列表中刪除
- 29. 嘗試刪除表中的字段內容時發生錯誤
- 30. 嘗試刪除註冊表中的密鑰時出錯
+1谷歌Guava – Snekse
同意。不過,我認爲值得注意的是,原始方法確實會返回一個由原始數組支持的列表,並將「直寫」更改爲原始數組。使用它將不會返回原始數組支持的List,並且此返回的List中的任何更改都不會影響原始數組。 – desau
@desau:我已編輯以表明這一點。 –