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;