先上代码:
String serial= "a,b,c";
String[] ss = serial.split(",");
List<String> list=Arrays.asList(ss);
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (number.equals(s)) {
iterator.remove();//使用迭代器的删除方法删除
}
}
这样运行到
iterator.remove();//使用迭代器的删除方法删除
就会报错,抛出异常。
正确写法:
String serial= "a,b,c";
String[] ss = serial.split(",");
List<String> list=new ArrayList<>(Arrays.asList(ss));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (number.equals(s)) {
iterator.remove();//使用迭代器的删除方法删除
}
}
就是:
List<String> list=new ArrayList<>(Arrays.asList(ss));
这一行要这样写,list才具有add()、remove()、clear()的功能。
原因:
这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!
public void add(int index, E element) { throw new UnsupportedOperationException();}
public E remove(int index) {throw new UnsupportedOperationException();}
所以:
List只是用来遍历,就用Arrays.asList()。
List要进行add()、remove()等操作,就要new一个java.util.ArrayList,然后进行后面的操作:
String[] ss={"abc","def","xyz","aaaaaaaa","bbbb","abc"}; List<String> list=new ArrayList<String>(Arrays.asList(ss));//按添加顺序显示