关于ArrayList的面试题目
其实并没有太听明白面试官问的什么意思,大概意思就是java的ArrayList在遍历或者迭代的时候能否删除元素,当时并没有get到面试官的点,现在都不太明白他想问什么
希望大家能帮我分析一下面试官什么意思,他想考察什么问题
正确的答案是什么
其实并没有太听明白面试官问的什么意思,大概意思就是java的ArrayList在遍历或者迭代的时候能否删除元素,当时并没有get到面试官的点,现在都不太明白他想问什么
希望大家能帮我分析一下面试官什么意思,他想考察什么问题
正确的答案是什么
List<String> list = new ArrayList<>(
Arrays.asList("welcome","to","码上","实战"));
//方法1 一般型for循环遍历
for(int i = 0;i < list.size(); i ++){
System.out.println(list.get(i));
// 删除 to
if (i==1) {
list.remove(i);
}
}
//你会发现,我删除to,结果却没有遍历到 ‘码上’
//方法2 增强型for循环遍历
for(String value:list){
System.out.println(value);
list.remove(value);
}
//你运行异常 java.util.ConcurrentModificationException
//方法3 集合类的通用遍历方式
Iterator it1 = list.iterator();
while(it1.hasNext()){
String next = (String) it1.next();
System.out.println(next);
if (next.equals("to")) {
it1.remove();
}
}
方法三是最合适的删除。 关注‘码上实战’,交流。
可以参考阿里的Java规范
【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator 对象加锁。
3 回答2.2k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
8 回答2.9k 阅读
4 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
1 回答1.9k 阅读✓ 已解决
遍历的时候可以删除元素,但是要注意手动修改一下循环变量(减1),否则会导致中间的某些元素错误地跳过,遍历不到。
用迭代器迭代的时候可以删除元素,但是只能通过迭代器来删除,不能直接在数组上删除,否则迭代器会抛出异常。
如果有多个迭代器同时迭代的话不能删除,否则其他迭代器同样会抛出异常