我有以下代码:
public static String SelectRandomFromTemplate(String template,int count) {
String[] split = template.split("|");
List<String> list=Arrays.asList(split);
Random r = new Random();
while( list.size() > count ) {
list.remove(r.nextInt(list.size()));
}
return StringUtils.join(list, ", ");
}
我得到这个:
06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException
06-03 15:05:29.614: ERROR/AndroidRuntime(7737): at java.util.AbstractList.remove(AbstractList.java:645)
这怎么会是正确的方法?Java 15
你的代码有很多问题:
在Arrays.asList
返回一个固定大小的列表
从API:
Arrays.asList
:返回指定数组支持的固定大小的列表。
你不能add
做到 你不能remove
。你无法在结构上修改List
。
Fix
创建一个LinkedList
,支持更快remove
。
List<String> list = new LinkedList<String>(Arrays.asList(split));
关于split正则表达式
从API:
String.split(String regex)
:在给定正则表达式的匹配项周围拆分此字符串。
|
是正则表达式元字符;如果要拆分文字|
,则必须将其转义\|
为Java字符串文字"\\|"
。
固定:
template.split("\\|")
关于更好的算法
与其remove
一次用一个随机索引调用一个数字,不如生成一个足够的范围内的随机数,然后用List一次遍历一次listIterator()
,并remove()
在适当的索引上调用,这更好。关于如何在给定范围内生成随机但不同的数字,有一些关于stackoverflow
的问题。
这样,你的算法将是O(N)
。
我试图编辑我的deletar()方法,把一个迭代器移除元素,但没有工作,错误继续。
问:反转一个列表(自己做方法,不要用集合) 我收到一个错误< code > UnsupportedOperationException 试验 我不明白为什么在< code>list.remove(0)上出现< code > UnsupportedOperationException ;
我使用保存通过调用方法。然后,我尝试使用方法。但当我尝试这样做时,我得到了一个。这其中的原因是什么?我应该如何解决这个问题?
使用JavaVersion9,我有一些测试代码可以从通过向DefaultListModel传递一个refrence创建的列表中删除一个项目。这就是我所做的。 > 创建DefaultListModel对象 通过调用addelement将8个元素添加到它(A..H)中 通过调用RemoveElement删除项 创建一个Jlist,将我的DefaultListModel的引用传递给它 列表框显示所有8个
示例代码: 我正在类A中的页面上创建WebElement列表,在类B中,我试图单击第一个元素。 在执行时,我得到以下例外: 问题与findElement有关,因为当我在代码中手动使用findElement方法将元素添加到列表中时,代码运行良好。 在下面的示例中,我对findElements行进行了注释,并手动添加了元素,这段代码运行良好。 有人能告诉我出了什么问题吗?
实际上,在按下一个按钮后,我有一个方法可以检查itemStorico ArrayList中是否存在从itemModel添加的新项,然后如果该项存在于名为itemModel的新列表中,我将从itemStorico中删除旧项并添加新项,否则只添加新项而不删除旧项。 但我得到以下错误: 下面是我的方法中的代码: