结论:
1、删除时:
方案一:利用iterator,详见如下
方案二: for循环倒序进行删除
2、添加时
利用for循环进行添加。不能使用iterator
删除案例
java.util.List<String> list=new ArrayList();
list.add("aa");
list.add("bb");
list.add("bb");// 注意,要有多个bb
list.add("cc");
将list中的“鹿晗”删除掉
案例来自:
HBase2.1.x TTL-马育民老师 (malaoshi.top)
方式一(报错)
通过for语句循环
int size=list.size();
System.out.println("size:"+size);
for(int i=0;i<size;i++){
String e=list.get(i);
if("bb".equals(e)){
list.remove(e);
}
}
执行报错如下:
size:4
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
list长度是4,因为删除了一个“鹿晗”,此时list中只有3个元素,当循环第4次时会报错
方式二(报错)
for(String e:list){
if("bb".equals(e)){
list.remove(e);
}
}
执行报错:
Exception in thread "main" java.util.ConcurrentModificationException
在for each循环中,修改list会报错
方式三(推荐)
从后向前循环,元素相同就删除,但i减小,所以不会引发list越界
for(int i=list.size()-1;i>=0;i--){
String e=list.get(i);
if("bb".equals(e)){
list.remove(e);
}
}
System.out.println(list);
方式四(推荐)
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String value = it.next();
if (value.equals( "bb")) {
it.remove(); //此处不能写成list.remove(value),十分易错
}
}
添加案例
List中数据
world
python
遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
方式一(报错)
Iterator<String> it = list.iterator();
while(it.hasNext){
String s = it.next();
if(s.equals("world")){
list.add("javaee");
}
}
报错:
ConcurrentException
此报错具体解析可以详见视频:
黑马程序员全套Java教程_Java基础入门视频教程,零基础小白自学Java必备教程_哔哩哔哩_bilibili
方式二:(建议)
for(int i=0; i<list.size(); i++){
String s = list.get(i);
if(s.equals("world")){
list.add("javaee");
}
}