我使用List
保存通过调用数组获得的一些数据。asList()
方法。然后,我尝试使用myList删除一个元素。删除(int i)
方法。但当我尝试这样做时,我得到了一个UnsupportedOperationException
。这其中的原因是什么?我应该如何解决这个问题?
请阅读Arrays.asList()的API文档:
返回由指定数组支持的固定大小的列表。(对返回列表的更改“直写”到数组。)
请注意,集合。remove(int)在Javadocs中标记为“可选操作”,这意味着并非所有Collections都支持它。“固定大小列表”意味着您无法更改列表的大小,而remove()可以这样做。所以它不受支持。
如果要更改由数组生成的列表,只需复制它,例如新的数组列表(数组。
不是< code>java.util.ArrayList。< code>Arrays.asList()返回自己的< code>List实现(将更改“写入”到数组中)。).
这是一个固定大小的列表,因此不支持删除。
您可以从中创建一个真正的ArrayList:
new java.util.ArrayList<>(Arrays.asList(someArray));
我必须承认,asList()
的工作方式非常令人困惑。
数组。asList()
在列表界面包装数组。该列表仍由阵列支持。数组是固定大小的-它们不支持添加或删除元素,因此包装器也不能。
医生没有尽可能说清楚,但是他们说:
返回由指定数组支持的固定大小的列表。
“固定大小”位应该是一个提示,表明您无法添加或删除元素:)
尽管有其他方法(从数组创建新的< code>ArrayList而不需要额外的库)来解决这个问题,但我个人还是建议使用Google Collections库(或者Guava,当它发布时)。然后,您可以使用:
List<Integer> list = Lists.newArrayList(array);
我之所以建议这样做,是因为GCL通常是一件好事,非常值得使用。
如注释中所述,这需要数组的副本;该列表不受原始数组的支持,并且任何一个集合中的更改都不会在另一个集合中看到。
问题内容: 我有以下代码: 我得到这个: 这怎么会是正确的方法?Java 15 问题答案: 你的代码有很多问题: 在返回一个固定大小的列表 从API: :返回指定数组支持的固定大小的列表。 你不能做到 你不能。你无法在结构上修改。 Fix 创建一个,支持更快。 关于split正则表达式 从API: :在给定正则表达式的匹配项周围拆分此字符串。 是正则表达式元字符;如果要拆分文字,则必须将其转义为J
我试图编辑我的deletar()方法,把一个迭代器移除元素,但没有工作,错误继续。
实际上,在按下一个按钮后,我有一个方法可以检查itemStorico ArrayList中是否存在从itemModel添加的新项,然后如果该项存在于名为itemModel的新列表中,我将从itemStorico中删除旧项并添加新项,否则只添加新项而不删除旧项。 但我得到以下错误: 下面是我的方法中的代码:
问:反转一个列表(自己做方法,不要用集合) 我收到一个错误< code > UnsupportedOperationException 试验 我不明白为什么在< code>list.remove(0)上出现< code > UnsupportedOperationException ;
在mysql工作台中,我试图执行 这是一个查询,但是我收到了这个消息 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-
问题内容: 我有这段代码: 但我得到的结果是: 当然,我期望低于20的数字不会出现在结果中,我假设我对删除操作做错了什么。 问题答案: 在遍历列表时,你正在修改它。这意味着第一次遍历循环时,i==1,因此1从列表中删除。然后for循环转到列表中的第二项,不是2,而是3!然后从列表中删除,然后for循环转到列表中的第三项,现在是5。等等。也许这样更容易想象,用表示的值: 最初是列表的状态;然后删除1