Java 从ArrayList中删除对象

Java 从ArrayList中删除对象,java,arraylist,Java,Arraylist,我想从ArrayList中删除一个元素,该元素的长度等于作为整数传递的数字。我的代码如下。运行时,当使用remove()方法时,程序在行中抛出UnsupportedOperationException。实际上,这是一个编码问题 public static List<String> wordsWithoutList(String[] words, int len) { List<String> list = new ArrayList<String&g

我想从
ArrayList
中删除一个元素,该元素的长度等于作为整数传递的数字。我的代码如下。运行时,当使用
remove()
方法时,程序在行中抛出
UnsupportedOperationException
。实际上,这是一个编码问题

public static List<String> wordsWithoutList(String[] words, int len) {    
    List<String> list = new ArrayList<String>();

    list = Arrays.asList(words);

    for(String str : list) {
        if(str.length() == len) {
            list.remove(str);
        }
    }
    return l;       
}
publicstaticlist-wordsWithoutList(String[]words,int-len){
列表=新的ArrayList();
list=Arrays.asList(单词);
for(字符串str:list){
如果(str.length()==len){
删除(str);
}
}
返回l;
}

asList
返回的列表不是
ArrayList
——它不支持修改

你需要做什么

public static List<String> wordsWithoutList(String[] words, int len) {

    List<String> l = new ArrayList<String>( Arrays.asList(words) );

    for( Iterator<String> iter = l.iterator(); iter.hasNext(); ){
        String str = iter.next();
        if(str.length()==len){
            iter.remove();
        }
    }
    return l;       
}

好的,那你的问题是什么?我想知道为什么它会抛出上面的例外,你应该将其转换为
(List)数组。asList(words)在迭代同一列表时,不能从列表中删除元素。奇怪的是,这是一种好的做法(修改要迭代的列表)吗?或者应该创建一个新的列表,在其中添加我们需要的元素并返回新的ArrayList?我认为创建一个新列表并向其中添加项目更为简洁。@zengr或者使用
ArrayList
从中间删除项目会移动列表中的以下所有项目,因此,如果有许多项要删除或列表很大,最好使用复制策略。@事实上,您的代码工作正常,但当我用以下代码替换for循环时,它会抛出ConcurrentModificationException。你能告诉我为什么吗?因为据我所知,从对象中删除对象的语法是正确的,逻辑也是有效的,但它仍然引发异常。感谢(String str:l){if(str.length()==len){l.remove(str);}}@zengr,我的观点是这肯定不是一个坏的做法,因为这正是迭代器的add和remove方法的用途。
List<String> l = new ArrayList<String>(str.length());
                                   //  ^^ initial capacity optional
for( String str : words )
    if( str.length()!=len)
        l.add(str);

return l;