我有这样的代码:

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


当前回答

对于这个问题,我有另一个解决方案:

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

工作在newList;)

其他回答

只需阅读JavaDoc中的asList方法:

返回对象的{@code List} 在指定数组中。的大小 {@code List}不能被修改, 即添加和删除是 不支持,但元素可以支持 集。元素的设置将修改 底层数组。

这是来自Java 6,但它看起来是一样的android Java。

EDIT

结果列表的类型是Arrays。数组列表,它是数组。class中的私有类。实际上,它只是你通过Arrays.asList传递的数组的List-view。结果是:如果你改变了数组,列表也会改变。由于数组不能重新调整大小,因此删除和添加操作必须不受支持。

不能向固定大小的数组列表中删除或添加数组。

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

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));

这将创建数组列表,它不像Arrays.asList那样是固定大小的

是的,在数组上。返回一个固定大小的列表。

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

例子:

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

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

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

parentRecepeIdList.add("555");

Arrays.asList()在内部使用固定大小的数组。 你不能动态地添加或删除thisArrays.asList()

使用这个

Arraylist<String> narraylist=new ArrayList(Arrays.asList());

在naraylist中,您可以轻松地添加或删除项目。

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

更改这一行:

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

到这一行:

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