java - Why do I get an UnsupportedOperationException when trying to remove an element from a List? -


i have code:

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, ", "); } 

i this:

06-03 15:05:29.614: error/androidruntime(7737): java.lang.unsupportedoperationexception 06-03 15:05:29.614: error/androidruntime(7737):     @ java.util.abstractlist.remove(abstractlist.java:645) 

how correct way? java.15

quite few problems code:

on arrays.aslist returning fixed-size list

from api:

arrays.aslist: returns fixed-size list backed specified array.

you can't add it; can't remove it. can't structurally modify list.

fix

create linkedlist, supports faster remove.

list<string> list = new linkedlist<string>(arrays.aslist(split)); 

on split taking regex

from api:

string.split(string regex): splits string around matches of given regular expression.

| regex metacharacter; if want split on literal |, must escape \|, java string literal "\\|".

fix:

template.split("\\|") 

on better algorithm

instead of calling remove 1 @ time random indices, it's better generate enough random numbers in range, , traversing list once listiterator(), calling remove() @ appropriate indices. there questions on stackoverflow on how generate random distinct numbers in given range.

with this, algorithm o(n).


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -