尝试从列表中删除元素时,为什么会出现UnsupportedOperationException?

故事扮演 提交于 2020-02-26 05:38:04

我有以下代码:

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


#1楼

您不能删除,也不能添加到固定大小的数组列表中。

但是您可以从该列表创建子列表。

list = list.subList(0, list.size() - (list.size() - count));

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 = list.subList(0, list.size() - (list.size() - count));
   }
   return StringUtils.join(list, ", ");
}

*其他方式是

ArrayList<String> al = new ArrayList<String>(Arrays.asList(template));

这将创建不固定大小的ArrayList,例如Arrays.asList


#2楼

我认为替换为:

List<String> list = Arrays.asList(split);

List<String> list = new ArrayList<String>(Arrays.asList(split));

解决了问题。


#3楼

是的,在Arrays.asList ,返回一个固定大小的列表。

除了使用链接列表之外,只需使用addAll方法列表。

例:

String idList = "123,222,333,444";

List<String> parentRecepeIdList = new ArrayList<String>();

parentRecepeIdList.addAll(Arrays.asList(idList.split(","))); 

parentRecepeIdList.add("555");

#4楼

对于该问题,我还有另一种解决方案:

List<String> list = Arrays.asList(split);
List<String> newList = new ArrayList<>(list);

newList工作;)


#5楼

可能是因为您使用的是不可修改的包装器

更改此行:

List<String> list = Arrays.asList(split);

到这行:

List<String> list = new LinkedList<>(Arrays.asList(split));
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!