我有这样的代码:

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 = 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那样是固定大小的

其他回答

Arraylist narraylist = arrays . aslist ();//返回不可变数组列表 使其可变的解决方案将是: Arraylist naraylist =new Arraylist (Arrays.asList());

Arrays.asList()返回的列表可能是不可变的。你能试试吗?

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

这个问题已经困扰我很多次了。数组。asList创建一个不可修改的列表。 返回指定数组支持的固定大小的列表。

创建一个具有相同内容的新列表:

newList.addAll(Arrays.asList(newArray));

这将产生一些额外的垃圾,但您将能够对其进行突变。

这个UnsupportedOperationException会在你试图对集合执行一些不允许的操作时出现,在你的情况下,当你调用数组时。asList不返回java.util.ArrayList。它返回一个java.util。数组$ArrayList是一个不可变列表。你不能向它添加,也不能从它删除。

以下是来自Arrays的代码片段

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    /**
     * @serial include
     */
    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

所以当asList方法被调用时,它会返回它自己的私有静态类版本的列表,它不会覆盖AbstractList中的add函数来将元素存储在数组中。默认情况下,抽象列表中的add方法会抛出异常。

所以它不是正则数组列表。