1.【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方
法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。
说明: asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList
体现的是适配器模式,只是转换接口,后台的数据仍是数组。
String[] str = new String[] { "you", "wu" };
List list = Arrays.asList(str);
第一种情况:
list.add("yangguanbao");
运行时异常。第二种情况: str[0] = "gujin"; 那么 list.get(0) 也会随之修改
2.【强制】不要在 foreach 循环里进行元素的 remove/add 操作。 remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator 对象加锁。正例:
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String item=iterator.next();
if(删除元素的条件){
iterator.remove();
}
}
反例: List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
说明:
以上代码的执行结果肯定会出乎大家的意料,那么试一下把
“1”
换成
“2”
,会是同样的结果吗?