第一种删除方式:迭代器
public class Test {
public static void main(String args[]){
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("b");
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
String s = iter.next();
if(s.equals("b")){
iter.remove();
}
}
System.out.println(list);
}
}
运行结果为【a,c】
第二种删除方式:记录后统一删除
public class Test {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("b");
List<String> list_remove = new ArrayList<String>();
for(String s : list){
if("b".equals(s)){
list_remove.add(s); //把要移除的统一记录在一个集合
}
}
//统一移除
list.removeAll(list_remove);
System.out.println(list);
}
}
输出结果:【a,c】
错误删除的例子1,2
for (String s : list) { //移除元素后,无法预知到元素的位置。
if (s.equals("b")) {
list.remove(s);
}
}
for(int i=0;i<list.size();i++){
if(list.get(i).equals("b")){
list.remove(i);
}
} //输出[a, b, c, c]。size()的问题
向List中添加元素时出现UnsuppotedOperationException
List<String> words = new ArrayList<>();
String[] word = input.split("[\\t \\n]+");
List<String> list = Arrays.asList(word);
for(int i = 0; i < words.size()-1;i++) {
String nowStr = words.get(i);
String nextStr = words.get(i+1);
String bridge = getTwoEdgeLong(nowStr, nextStr);
if(bridge != "") {
words.add(i+1, bridge);//报错
i++;
}
}
原因是:不是每一个LIst的实现都能够支持add方法。最常见的例子就是Arrays.asList()返回的List列表。不支持在结构上的更改。在文档中记载:
Returns a fixed-size list backed by the specified array.
因此解决方法是:(将asList方法改为循环逐个添加元素)
List<String> words = new ArrayList<>();
String[] word = input.split("[\\t \\n]+");
for(int i = 0; i < word.length ;i++) {//更改为循环添加的方法。
words.add(word[i]);
}
for(int i = 0; i < words.size()-1;i++) {
String nowStr = words.get(i);
String nextStr = words.get(i+1);
String bridge = getTwoEdgeLong(nowStr, nextStr);
if(bridge != "") {
words.add(i+1, bridge);/*add method may not supported by special implement*/
i++;
}
}